Jak usuwać asocjacje wiele do wiele lub wiele do jeden? Pojawia się tu jeden banalny programistyczny problem. Nie można usuwać z listy/mapy po której się właśnie iteruje:
ŹLE:
public void usun() throws Exception { for(Wyplata wyplata : wyplaty) { this.usunWyplate(wyplata); } wyplaty.clear(); wszystkieWyplaty.clear(); }
DOBRZE:
@SuppressWarnings("unchecked") public void usun() throws Exception { for(Wyplata wyplata : (Vector<Wyplata>) wyplaty.clone()) { this.usunWyplate(wyplata); } wyplaty.clear(); wszystkieWyplaty.clear(); }
Jak widać w pierwszym przypadku próbuje usuwać elementy z Vector’a po którym iteruje. Nie ważne czy będzie to iteracja for(Klasa element : lista) czy for(int i = 0; i < lista.size(); i++) i tak problem będzie występował i usunie się tylko jeden/kilka elementów z listy lub wywali Exception.
Rozwiązaniem (DOBRY kod) jest zrobienie 'płytkiej’ kopii listy funkcją clone() i iterowanie po niej.
Ewentualnie to też powinno się sprawdzić (nie testowałem):
while(lista.size() > 0) { // usuwa pierwszy element jak dluga sa jakies elementy lista.remove(0); // mozna tu tez dac 'lista.get(0)', cos z tym zrobic, a potem dopiero remove(0) }