list에는 특별한 iterator인 ListIterator가 있습니다.
이것은 앞뒤 양방향으로 iterator을 순회할 수 있습니다.
hasPrevious() 함수와 previous()를 이용하여 뒤로 순회 할 수 있습니다.
추가적으로, nextIndex()와 previousIndex()로 요소의 인덱스를 알아낼 수 있습니다.
listIterator은 일반 iterator과는 다르게, 마지막 요소까지 도달한 이후로도 listIterator을 사용 할 수 있습니다.
val numbers = listOf("one", "two", "three", "four")
val listIterator = numbers.listIterator()
//listIterator을 마지막 까지 보냅니다.
while (listIterator.hasNext()) listIterator.next()
println("Iterating backwards:")
//listIterator을 다시 앞으로 순회합니다.
while (listIterator.hasPrevious()) {
print("Index: ${listIterator.previousIndex()}") //인덱스 사용 가능
println(", value: ${listIterator.previous()}") //마지막 요소까지 도달해도 재사용 가능
}
>>>
Iterating backwards:
Index: 3, value: four
Index: 2, value: three
Index: 1, value: two
Index: 0, value: one
iterator은 만들어질 때 무조건 맨 첫 요소를 가르키지만, listIterator은 직접 index값을 넣어서 원하는 요소를 가르키게 할 수 있습니다.
val numbers = listOf("one", "two", "three", "four")
val listIterator = numbers.listIterator(3)
println(listIterator.next()) //마지막 요소를 가르키게 했음
>>>
four