ArrayList<String> list = new ArrayList<String>();
list.add("test");
while(list.listIterator().hasNext()) {
System.out.println(list.listIterator().next());
}
Takto sa vytvorí nekonečná slučka vedení s „testom“. Prečo sa to stalo a ako to opraviť?
odpovede:
9 pre odpoveď č. 1Iterátor vytvorený pre hasNext nie je rovnaký ako pre nasledujúci.
ArrayList<String> list = new ArrayList<String>();
list.add("test");
Iterator listIterator = list.listIterator()
while(listIterator.hasNext()) {
System.out.println(listIterator.next());
}
3 pre odpoveď č. 2
Pretože vytvárate nový iterátor v každej slučke, novo vytvorený ukazovateľ iterátora sa umiestni pred prvý prvok v zozname. hasNext()
metóda v takom prípade sa vždy vráti pravdivá a next()
metóda vráti prvý prvok v zozname.
1 pre odpoveď č. 3
Tu:
System.out.println(list.listIterator().next());
pri každom pokuse o vytlačenie nasledujúceho prvku vytvoríte nový iterátor.
Skúste nasledujúce:
ArrayList<String> list = new ArrayList<String>();
list.add("test");
Iterator<String> it = list.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
1 pre odpoveď č. 4
Použite tento kód,
List<String> list = new ArrayList<String>();
ListIterator<String> litr = null;
list.add("test");
litr=list.listIterator();
System.out.println("Elements in forward directiton");
while(litr.hasNext()){
System.out.println(litr.next());
}
0 pre odpoveď č. 5
V každej vytvoríte novú inštanciu iterátora list.listIterator()
zavolať.
Vytvorte iterátor zoznamu raz, skôr ako slučka začne riešiť váš problém.
0 pre odpoveď č. 6
Vaše volanie listIterator vždy. Skúste priradiť premennú a zacyklite ju.
0 pre odpoveď č. 7
list.listIterator()
vracia nový Iterátor. Nižšie je uvedený zdroj AbstractList
public ListIterator<E> listIterator() {
return listIterator(0);
}
public ListIterator<E> listIterator(int location) {
return new FullListIterator(location);
}
Mali by ste urobiť slučku takto,
ArrayList<String> list = new ArrayList<String>();
list.add("test");
Iterator<String> iterator = list.listIterator();
while(iterator .hasNext()) {
System.out.println(iterator.next());
}
0 pre odpoveď č. 8
Váš problém je v tom, že pri každom vytvárate nový iterátor list.listIterator()
hovor. Všetky nové inštancie budú na začiatku iterátora. Môžete to opraviť, ak používate rovnaký iterátor:
ArrayList<String> list = new ArrayList<String>();
list.add("test");
Iterator<String> iterator = list.listIterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}