Ich möchte eine verkettete Liste verwenden, um Extraktionen und Einfügungen von Elementen durchzuführen und alle Kombinationen für eine Heuristik auszuprobieren. Verknüpfte Listen sind für diese Art von Operationen effizienter. Da ich alle möglichen Paare von Extraktionen/Inserts ausprobieren möchte, habe ich zwei verschiedene Iteratoren über die Liste verwendet. Dies löst eine "ConcurrentModificationException" aus. Wie könnte ich diese Operation effizient durchführen, ohne die Liste jedes Mal neu zu durchlaufen, da dies den gesamten Zweck der Verwendung einer Liste an erster Stelle zunichte machen würde?Wie verwendet man zwei verschiedene Iteratoren auf einer Linked List in Java?
Hier ist der relevante Teil des Codes:
ListIterator<Integer> it1 = data.listIterator();
ListIterator<Integer> it2;
while(it1.hasNext()) {
int i = it1.next();
it2 = data.listIterator();
while(it2.hasNext()) {
if (i == it2.next()) continue; // continue right away when the indexes are equal
it1.remove();
it2.add(i);
if (length() < best)
return true;
}
// when the swap is not better/consistent
it2.remove();
it1.add(i);
}
return false;
Dank
Wenn Sie die Liste durch einen Iterator ändern, können Sie keine anderen Iteratoren verwenden. –
Können Sie stattdessen ConcurrentLinkedQueue verwenden, da CME nicht abgerufen wird? Ich vermute, dass es in jedem Fall einen effizienteren Weg gibt, zu tun, was immer du tust. –
Bitte Google so: www.google.com/search?q=multi+dimensional+linked+list+java und überprüfen Sie die Ergebnisse wie http://www.dreamincode.net/forums/topic/282327-multi-dimensional-linked -list/ –