ListIterator problem

ListIterator problem
M4v3n
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 7 lat
  • Postów:19
0

Może od kodu zacznę:

Kopiuj
public class Main{
    public static void main(String[] args) {
        List list = new ArrayList<String>();
        list.add("jeden");
        list.add("dwa");
        list.add("trzy");
        list.add("cztery");

        ListIterator<String> iterator = list.listIterator(2);
        System.out.println(iterator.next());
        System.out.println(iterator.next());
        System.out.println(iterator.previous());
        System.out.println(iterator.previous());
        System.out.println(iterator.previous());
        System.out.println(iterator.next());
        System.out.println(iterator.next());
    }
}

A tutaj output:

Kopiuj
trzy
cztery
cztery
trzy
dwa
dwa
trzy

Nie wiem dlaczego tak się dzieje, i czy można użyć innego typu (albo opakować jakoś istniejący) żeby nieduplikowały się wartości z iteratora?

LI
  • Rejestracja:około 8 lat
  • Ostatnio:3 miesiące
  • Postów:87
0

Wynik jest poprawny. Zaczynasz od pozycji 2 (lista liczona od 0) i lecąc iteracjami przód ->przód -> 3x tył ->2x przód prawidłowo pokazuje wynik.

M4v3n
To jakiego typu użyć żeby nie duplikowało mi referencji przy zmianie kierunku?
M4v3n
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 7 lat
  • Postów:19
0

Opakowałem to w klasę gdzie sprawdzam kierunek listy (jeśli kierunek się zmienia wywołuje analogicznie previous lub next 2 razy), może jest jakaś wbudowana klasa w Javie która do tego służy?

jarekczek
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Siemianowice Śląskie
  • Postów:500
1

Dlaczego tak się dzieje? Opisuje to dokumentacja: https://docs.oracle.com/javase/7/docs/api/java/util/ListIterator.html

Wydaje mi się, że nie ma nic wbudowanego. Ja bym trzymał po prostu indeks w tablicy i zwiększał go lub zmniejszał o 1. Ale Twój pomysł ze zmianą kierunku i 2x jest dobry. Mając swoją klasę do przesuwania będziesz mógł w przyszłości zmienić jej implementację, np. na zwykłe trzymanie indeksu.

Pamiętaj, że ArrayList obsługuje RandomAccess (szybki dostęp do elementu znając jego index), a LinkedList - nie. Za to LinkedList pozwala wydajnie dodawać i usuwać elementy ze środka listy.


Przeważnie ignoruję niezarejestrowanych użytkowników.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.