scala 迭代器

19 阅读2分钟

迭代器(Iterator)是 Scala 中处理集合元素的重要工具,它提供了一种按需访问集合元素的方式,无需一次性加载整个集合到内存,尤其适合处理大数据量集合。

一、迭代器的核心概念

Scala 中的迭代器是一个单向的、可遍历集合的对象,其核心特性:

  • 惰性访问:迭代器不会一次性加载所有元素,而是在调用 next() 时才获取下一个元素;
  • 单向移动:迭代器的指针只能向前移动,一旦移动到末尾,无法回退;
  • 一次性使用:迭代器遍历完成后(指针到末尾),无法再次使用,需重新创建。

二、基础使用:遍历集合

首先从最基础的迭代器遍历集合开始,对比直接遍历集合和迭代器遍历的区别

scala

package it
/*
迭代器
 */

object it01 {
  def main(args: Array[String]): Unit = {
    val list1 = List(1, 2, 3, 4, 5)  // 第一个列表(变量名唯一)
    val list2 = List(11, 22, 33, 44, 55)  // 第二个列表(重命名为 list2)

    // 遍历 list1
    list1.foreach(ele => println(ele))
    // 遍历 list2(原代码重复遍历了 list1,这里修正为遍历第二个列表)
    list2.foreach(ele => println(ele))

    // 用迭代器遍历 list2(或根据需求选择 list1)
    val iterator = list2.iterator
    while (iterator.hasNext) {
      println(iterator.next())
    }
  }
}

2.2 注意:next() 越界问题

迭代器的 next() 方法在没有下一个元素时会抛出 NoSuchElementException,必须通过 hasNext() 先判断:

代码如下

scala
package it

/*
迭代器
next()获取下一个,移动迭代器的位置,如果没有下一个就报错
hasNext判断当前是否存在下一个元素false true
drop()跳过指定数量的元素返回一个新的迭代器
take()跳过指定数量的元素返回一个新的迭代器
 */

object it02 {
  def main(args: Array[String]): Unit = {
    val it = List(1,2,3,4,5).iterator

    println(it.next())
    println(it.next())
    println(it.next())
    println(it.next())
    println(it.next())
    println(it.hasNext)
    println(it.next())
//    val it1=List(1,2,3,4,5,).iterator
//   val it2 = it1.drop(2)
//    while(it2.hasNext){
 //     println(it2.next())
    }
  val it3=List(1,2,3,4,5).iterator
  it3.next()
  it3.next()

     val it4 = it3.take(2)
      while(it4.hasNext){
      println(it4.next())
  }


}