Minikvíz - ListIterator

Třídu java.util.ListIterator asi není nutné nikomu představovat, každý ji určitě zná, pravidelně používa a nikomu nebude dělat probém říct, co na výstup vypíše následující kousek kódu. Samozřejmě bez pročítání javadocu:).

ListIterator<Integer> li = Arrays.asList(1, 2, 3).listIterator();

System.out.print(li.next());
System.out.print(li.next());
System.out.print(li.previous());
System.out.print(li.next());
System.out.print(li.previous());
System.out.print(li.next());
System.out.print(li.next());

Ano, správně, bude to 1222223. Čekali jste neco jiného, třeba 1212123? Ani se moc nedivím, ListIterator se skutečně chová poněkud neintuitivně. Řekl bych, že častá vize iterátoru je objekt mající prstík postupně ukazující na řadu objektů. Voláním next se prstík posune na další prvek a řekne nám, na co ukazuje. S tímto prvkem se pak dají provádět různé operace, například ho vyřadit z kolekce.

ListIterator má taky takové ukazovátko, to však neukazuje na prvky ale mezi ně (případně před/za celý seznam). Metody next a previev ho posouvaji požadovaným směrem a vrací prvek, který ležel v daném směru od předchozí pozice (a kurzor ho 'přeskočil'). Tak už je jasné proč 1222223 ?

A ještě poznámka - metody modifikující kolekci pracují s posledním vráceným prvkem. Pokud například chcete smazat prvek ležící před prvkem X, jeden krok zpět nestačí...

Odkazy

ListIterator

Komentáře

Volby prohlížení komentářů

Vyberte si, jak chcete zobrazovat komentáře a klikněte na "Uložit změny".

intuitivnost

V programovani jsem se naucil, ze intuitivnost je veci subjektivni :) Me tohle zrovna intuitivni pripada a tezce jsem premyslel, kde je chytak...

Volby prohlížení komentářů

Vyberte si, jak chcete zobrazovat komentáře a klikněte na "Uložit změny".