迭代器

33 阅读2分钟

迭代器的定义

迭代器是一种用于遍历集合元素的对象。它提供了统一的方式来访问各种集合类 型(如列表、映射、集合等)中的元素,而不需要了解集合的内部结构。

在 Scala 中,迭代器是一种抽象的概念,它有特定的接口和方法来实现元素的遍历。

package it
/*
迭代器
*/
object it01 {
  def main(args: Array[String]): Unit = {
    val list1 = List(1, 2, 3, 4, 5)  // 修正:list1 应为小写开头

    // 1. 使用 foreach 遍历列表
    list1.foreach(ele => println(ele))

    // 2. 获取迭代器
    val iterator = list1.iterator

    // 3. 使用 while 循环和迭代器遍历
    // hasNext() 检查是否有下一个元素
    // next() 获取下一个元素
    while (iterator.hasNext) {
      println(iterator.next())
    }
  }
}

迭代器

    1. next() 获取下一个元素,移动迭代器的位置。如果没有下一个,就报错
    1. hasNext 判断当前是否存在下一个元素:返回 false 或 true */
package it
/* 迭代器 */
/*
 * 1. next() 获取下一个元素,移动迭代器的位置。如果没有下一个,就报错
 * 2. hasNext 判断当前是否存在下一个元素:返回 false 或 true
 */
object it02 {
  def main(args: Array[String]): Unit = {
    val it = List(1, 2, 3, 4, 5).iterator

    // 取出前4个元素
    println(it.next())  // 1
    println(it.next())  // 2
    println(it.next())  // 3
    println(it.next())  // 4

    println(it.next())


    println(it.hasNext)  // 再次检查是否还有下一个元素

    // 第6次使用next(),会报错!!!
     println(it.next())
  }
}

迭代器

    1. next() 获取下一个,移动迭代器的位置。如果没有下一个,就报错
    1. hasNext判断当前是否存在下一个元素:false, true
    1. drop() 跳过指定数量的元素,返回一个新的迭代器
    1. take() 获取指定数量的元素,返回一个新的迭代器
object it03 {
    def main(args: Array[String]): Unit = {
      // 示例1: drop() 方法
      val it1 = List(1, 2, 3, 4, 5).iterator
      // 跳过前两个元素
      val it2 = it1.drop(2)

      println("使用 drop(2) 后的元素:")
      while (it2.hasNext) {
        println(it2.next()) // 输出: 3, 4, 5
      }

      println("\n" + "=" * 30 + "\n")

      // 示例2: take() 方法
      val it3 = List(1, 2, 3, 4, 5).iterator

      // 先消耗前两个元素
      it3.next() // 1
      it3.next() // 2

      // 获取接下来2个元素
      val it4 = it3.take(2) // 获取指定数量的元素;返回一个新的迭代器

      println("使用 take(2) 后的元素:")
      while (it4.hasNext) {
        println(it4.next()) // 输出: 3, 4
      }

      // 注意:it3 现在只剩下元素 5
      println("\n原迭代器 it3 剩余的元素:")
      println(it3.hasNext) // true,因为还有元素5
      if (it3.hasNext) {
        println(it3.next()) // 5
      }
    }
}