Angy: Threads und Vectoren

Hallo,

Ich schreibe ein Programm ( Class ListClass ) in dem Listen befüllt werden und wenn der Eintrag abgearbeitet ist wird er gelöscht.

Zudem läuft parallel ein Thread, der alle 2 Sekunden checkt ob Einträge schon zu lange drin sind und diese dann rauslöscht.

Code:
public class ExpiresThread extends Thread{

ListClass list;  
Vector<Vector<Object>> eventList;  
Vector<Vector<Object>> dialogList;  
  
public ExpiresThread(ListClass list){  
	this.list = list;  
}  
  
public void run(){  
	Vector<Vector<Object>> eventListOld;  
	Vector<Vector<Object>> dialogListOld;  
	while(true){  
	eventListOld = list.getEventList();  
	dialogListOld = list.getDialogList();  
	  
	try {  
		Thread.sleep(2000);  
	} catch (InterruptedException e) {  
		// TODO Auto-generated catch block  
		e.printStackTrace();  
	}  
	  
	//check Event Lists  
	checkEvents(eventListOld);  
	checkDialogs(dialogListOld);  
	}  
}  
  
private void checkEvents(Vector<Vector<Object>> l1){  
	Vector<Vector<Object>> l2 = list.getEventList();  
	  
	System.out.println(l2);  
	for (int z = 0; z < l1.size(); z++) {  
		if(l2.contains(l1.get(z))){  
			list.removeVec(l1.get(z));  
		}  
	}  
}  
  
private void checkDialogs(Vector<Vector<Object>> l1){  
	Vector<Vector<Object>> l2 = list.getDialogList();  

	for (int i = 0; i < l1.size(); i++) {  
		if(l2.contains(l1.get(i))){  
			list.removeDiaVec(l1.get(i));  
		}			  
	}  
}  

}

ListClass hat die Methoden:

getEventList() gibt ne Liste zurück
getDialogList()    - " -

removeDiaVec() ist eine synchronized Methode die Vector.remove(Object) ausführt
removeVec()                            - " -

Problem:
Nur jedes zweite Element wird gelöscht!
Wenn voher 34 Elemente in jeder Liste waren (in l1 und l2 steht das Gleiche)
stehen dannach immernoch 17 Elemente drin.

Warum?
Ich habe sogar mit l1 = l2 vor dem "for(..)" getestet, es wird auch hier nur die Hälfte gelöscht.

Auch nachdem das Programm mit befüllen und löschen der Listen fertig ist, und noch ein Rest in den Listen steht wird alle 2 Sekunden nur die Hälfte gelöscht.

Hilfe hilfe!

Grüßle
Angy

  1. Tschuldigung Tschuldigung, selbst rausgefunden!

    for(... l1.size()...)

    Wenn ich was remove aus der Liste,wird jedesmal die Size kleiner und der Eintrag rutscht ja eins weiter.

    Doofer Fehler..

    Angy

    1. Hallo Angy,

      Wenn ich was remove aus der Liste,wird jedesmal die Size kleiner und der Eintrag rutscht ja eins weiter.

      Richtig. Am einfachsten ist afaik hier wohl eine while-Schleife:

      while (<List>.size()>0) { <List>.remove(0); }

      Mit freundlichem Gruß
      Micha