Comportamiento del método size de iterador en Scala

Advertisements

Los iteradores (Iterator) son una estructura útil para recorrer colecciones (List, Set, Seq, Map, etc.) y acceder a sus elementos uno por uno. Dos métodos importantes en Scala Iterator son next() y hasNext.

  • hasNext: Indica si hay otro elemento para devolver
  • next(): Devuelve ese elemento.

Los iteradores son cosas mutables. Puedes pensar en ellos como punteros. Cada vez que le pida a un iterador que le proporcione el siguiente elemento al que apunta, se moverá una posición más.

Advertisements

Comportamiento del método size

Cuando se obtiene el tamaño de un iterador, atravesará cada elemento en la secuencia a la que apunta, moviéndose cada vez una posición hacia la derecha. Cuando no tenga más elementos para atravesar iterator.hasNext == false, devolverá el tamaño. Pero para entonces habrá agotado todos los elementos.

Cuando se realiza una nueva llamada al método size, el iterador ya está posicionado al final, por lo que devolverá inmediatamente 0. Por lo tanto, si intenta recorrer el iterador después de obtener el tamaño, notará que el iterador no está haciendo nada.

val list = scala.collection.immutable.List(1, 2, 3)
val iterator = list.iterator
println(iterator.size) // 3
println(iterator.hasNext) // false
println(iterator.size) // 0

Referencias

Advertisements

Leave a Reply

Your email address will not be published.