迭代器2025.10

34 阅读1分钟
object iterator02 {
    /**
     * 1. next() 获取当前的元素, 移动一次迭代器
     * 2. hasNext 判断是否有下一个元素
     * 3. drop(n) 从当前位置开始, 跳过 n 个元素, 它返回一个新的迭代器
     */
    def main(args: Array[String]): Unit = {
        // 获取一个迭代器
        val it = List(1,2,3,4).iterator

        //
        println(it.next())
        println(it.next())
        println(it.next())
        println(it.next())
        //
        println(it.next()) // NoSuchElementException: head of empty list

        val it1 = it.drop(2)
        while(it1.hasNext){
            println(it1.next()) // 3, 4
        }
    }
}
  • 陷阱 1:耗尽的迭代器调用next()。解决方案:始终用hasNext()做前置判断。​
  • 陷阱 2:认为drop(n)会修改原迭代器。解决方案:明确drop(n)返回新迭代器,原迭代器状态不变。​
  • 陷阱 3:重复使用已遍历的迭代器。解决方案:若需多次遍历,先将迭代器转换为非惰性集合(如 List)。​
  • 陷阱 4:多线程操作迭代器。迭代器不是线程安全的,多线程环境下需加锁或使用线程安全的迭代器实现。