# Vergleich zweier Listen



## Frutz (3. Jul 2010)

Grüßt Euch,

ich beziehe mich mit meinem Post auf folgendes Thema:
http://www.java-forum.org/allgemeine-java-themen/63070-zwei-arraylist-s-vergleichen.html

Mir geht es um den Vergleich zweier XML-Dateien auf gleiche Werte.
Im obigen Thema dargestellte Methode funktioniert so weit, ich kann die Objekte aus der XML in eine ArrayList schreiben.
Vergleiche ich nun aber beide Array-Listen miteinander, erhalte ich eine leere Liste zurück, obwohl es sich (inhaltlich) um identische Objekte in beiden XML-Dateien handelt.

Hier noch etwas Quellcode:

```
[...]
Element aktuellesElement = null;
ArrayList<Object> test = new ArrayList<Object>();
		
Element aktuellesElement2 = null;
ArrayList<Object> test2 = new ArrayList<Object>();
		
		for (Object object : Extern){
			aktuellesElement= (Element) object;
			test.add(aktuellesElement.getValue());
			//System.out.println( aktuellesElement.getValue() );
			}
		
		for (Object object2 : Extern2){
			aktuellesElement2 = (Element) object2;
			test2.add(aktuellesElement2.getValue());
			//System.out.println( aktuellesElement2.getValue() );
		}

System.out.println("Liste 1: "+ test );
System.out.println("Liste 2: "+ test2 );

ArrayList<Object> vergleich = new ArrayList<Object>();
		vergleich.retainAll(test2);

System.out.println("Liste Vergleich: "+vergleich);
[...]
```

Als Ergebnis erhalte ich in der JAVA-Console:


> Liste 1: [X00VG6V001, X00VG6V002, X00VG6V003, X00VG6V004, X00VG6V005, X00VG6V006, X00VG6V007, X00VG6V008, X00VG6V009, X00VG6V00A, X00VG6V00B, X00VG6V00C, X00VG6V00D, X00VG6V00E, X00VG6V00F, X00VG6V00G, X00VG6V00H]
> 
> Liste 2: [X00VG6V001, X00VG6V002, X00VG6V003, X00VG6V004, X00VG6V005, X00VG6V006, X00VG6V007, X00VG6V008, X00VG6V009, X00VG6V00A, X00VG6V00B, X00VG6V00C, X00VG6V00D, X00VG6V00E, X00VG6V00F, X00VG6V00G, X00VG6V00H]
> 
> Liste Vergleich: []



Ich habe schon versucht <Object> durch <String> zu ersetzen, kenne mich da noch nicht so aus und dachte das hilft vielleicht. Macht's aber nicht, ich erhalte das selbe Ergebnis.

Kann es daran liegen, dass nicht der Inhalt sondern der Zeiger auf das Objekt verglichen wird? (Das glaub ich zwar selbst nicht, aber man weiß ja nie).

Weiß jemand Rat?

Danke, 
Gruß
Frutz


----------



## Gast2 (3. Jul 2010)

Hm, hast du dir mal angeschaut was retainAll macht?

Du legst hier zunächst ne leere Liste an. Auf diese leere Liste rufst du dann retainAll auf und wunderst dich dass die Liste immernoch leer ist?


----------



## Frutz (3. Jul 2010)

Oh man,

Danke, dass hab ich total übersehen. Ist zu warm.

Falls noch mal jemandem so ein Fehler unterläuft:

In Zeile 23 muss es natürlich heißen:

```
ArrayList<Object> vergleich = new ArrayList<Object>(test);
```

Gruß,
Frutz


----------



## Final_Striker (3. Jul 2010)

wieso dann nicht gleich : [c]test.retainAll(test2);[/c] ?


----------



## Frutz (3. Jul 2010)

Richtig, geht auch.
Hab mich am Beispiel orientiert, dort gab's ne dritte Liste. Die kann man sich sparen, wenn man die Elemente nicht mehr braucht.

Danke für den Hinweis.

Gruß


----------

