MAS – Mini projekt 2 – drugie pytania/problemy

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)
}
Ten wpis został opublikowany w kategorii PJWSTK – MAS. Dodaj zakładkę do bezpośredniego odnośnika.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *