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)
}