Probleme mit collection.containsAll

Status
Nicht offen für weitere Antworten.
S

Stefan79

Gast
Hallo
ich habe zwei Collections die ich miteinander vergleichen möchte. Das Ganze probiere ich so:
Code:
collection1.containsAll(collection2);
Nur leider scheint das nicht zu funktionieren. Mache ich irgendwas falsch oder kennt ihr einen anderen, vielleicht auch besseren weg zwei collections miteinander zu vergleichen.
Wäre sehr wichtig damit ich mit meinem Programm weiter machen kann, Danke :D
 
S

Stefan79

Gast
Also in Collection1 steht eingetragen, geändert und in Collection2 steht auch eingetragen, geändert
Dann frage ich ab:
Code:
if (container1.containsAll(container2)
{
   system.out.println("is containing");
   tueEtwas();
}
Und da meine Ausgabe nicht angezeigt wird, kann ich ja davon ausgehen, dass mit containsAll false zurück liefert obwohl beide collections identischen Inhalt besitzen.
Gibt es denn noch eine andere Möglichkeit, die ich mal ausprobieren könnte?
Oder an was könnte es denn liegen, habe mir beide collections auch schon ausgeben lassen und da steht wirklich in beiden das gleiche.
 

Wildcard

Top Contributor
Speicherst du dort Referenzen auf Objekte eigener Klassen und hast dort equals und hashCode nicht richtig überschrieben?
 
S

Stefan79

Gast
mhh...ich hole mir die Collections aus einer Map, weiß nicht ob das irgendwelche Auswirkungen auf containsAll hat:
Code:
Collection collection1 = (Collection)aMap.get(col1);
Collection collection2 = (Collection)aMap.get(col2);
if(collection1.containsAll(collection2)
{
    tueEtwas();
}
Die Collections werden an anderer Stelle schon als Collections in der Map gespeichert
 
S

Stefan79

Gast
Nein es werden keine Referenzen in der Collection gespeichert, sondern reine Strings.
Gäbe es denn eine andere Möglichkeiten Collections mit geringem Aufwand zu vergleichen?
 

Wildcard

Top Contributor
Das sind dann trotzdem Referenzen, eben auf String Objekte.
Ich behaupte das der Inhalt eben nicht identisch ist, sonst würde es mit Strings funktioneren (da dort equals und hashCode korrekt implementiert ist).
 
S

Stefan79

Gast
Hab es jetzt überprüft, der Hashcode ist ein anderer. Was muss ich da denn jetzt machen um die beiden Collections trotzdem vergleichen zu können?? WIe kann ich den HashCode überschreiben??
:(
 

Marco13

Top Contributor
Wenn der HashCode unterschiedlich ist, sind auch die Collections unterschiedlich. (Umgekehrt gilt das nicht unbedingt, aber das nur nebenbei....).

Du hättest die Frage wohl nie gestellt, wenn du mal versucht hättest, ein kleines, selbstständig compilierbares, lauffähiges Beispiel zu posten, wo der "Fehler" auftritt. Das wäre dir nämlich nicht gelungen (und du hättest gemerkt, dass der Fehler bei dir liegt) oder man hätte dir sofort gesagt, wo in deinem kleinen, selbstständig compilierbaren, lauffähigen Beispiel der Fehler ist.
 
M

maki

Gast
Stefan79 hat gesagt.:
Hab es jetzt überprüft, der Hashcode ist ein anderer. Was muss ich da denn jetzt machen um die beiden Collections trotzdem vergleichen zu können?? WIe kann ich den HashCode überschreiben??
:(
Irgendetwas machst du falsch.

Zwei String sind "equal", wenn sie den selben Text enthalten.
Wenn zwei Strings "equal" sind, dann haben sie den selben Hashcode.
 
S

Stefan79

Gast
OK ihr habt recht sollte vielleicht mal den ganzen Code posten damit mir geholfen werden kann:
Code:
 for(int i = 0; i < iTableModel.getRowCount();i++)
	      {
                String tKey = iTableModel.getValueAt(i,0);
	        Collection tCollection = (Collection) iTableModel.getValueAt(i,1);
                
                if (! tCollection.isEmpty())
                {
                      tMap.put(tKey, tCollection);
                 }
               }
// weiter unten im Code

List tKeyList = getSeparatedListString (tAvailableKeys) //liefert kommaseparierte Liste
for ( int i = 0; i < tKeyList.size(); i++)
{
    Collection tColl1 = (Collection)tMap.get(tKeyList.get(i));
    Collection tColl2 = (Collection) tMap.get(tKeyList.get(i));

    if ( tColl1.containsAll(tColl2))
    {
        tueEtwas();
    }
}
Ich hole mir also über den key die einzelnen Collections wieder heraus und möchte rein den Inhalt vergleichen, HashMap oder so interessiert mich nicht, scheinbar geht dies ja nicht über containsAll oder doch?
Wie kann ich es sonst noch lösen??
 

Wildcard

Top Contributor
Und wieder weigerst du dich beharrlich zu zeigen wo und wie deine Collections denn nun befüllt werden
 
S

Stefan79

Gast
Nein, sie werden durch Werte gefüllt, die ich aus einem TableModel auslese:
Code:
Collection tCollection = (Collection)tTableModel.getValueAt(i,1);
Der Inhalt der Table wird zeilenweise in die Collection geschrieben
 

Murray

Top Contributor
Mit diesem Statement wird die Collection zugewiesen; wie sie gefüllt wird, kann man hier nicht sehen.

Hast Du vieleicht irgendwo eine Catch-Block, in dem die gefangenen Exceptions einfach ignoriert werden? Möglicherweise tritt zur Laufzeit ein Cast-Fehler auf.
 
M

maki

Gast
Stefan79 sollte endlich man den verlangten Code posten, kann ja nicht so schwer sein...
 
S

Stefan79

Gast
Das ist der Code, die Collection wird weiter nicht genutzt nur diese Zuweisung, dann das Speichern in der Map und wieder aus der Map heraus holen. Ansonsten wird nicht weiter auf die Collection zugegriffen.
 
M

maki

Gast
Nochmal langsam: Poste den Code, in dem deine Collections befüllt werden.

So verständlicher?
 

Murray

Top Contributor
Versuch es mal so:

Code:
    if ( tColl1.containsAll(tColl2)) {
        System.out.println( "containsAll -> true");
        tueEtwas();
    } else {
        System.out.println( "containsAll -> false");
    }


Kommt denn dann die zweite Ausgabe?


Und das
Code:
   Collection tColl1 = (Collection)tMap.get(tKeyList.get(i));
   Collection tColl2 = (Collection) tMap.get(tKeyList.get(i));
ist doch Unfug, oder? Wenn tKeyList nicht eine selbstimplementierte Klasse mit einem finsteren Seiteneffekt in der get-Methode ist, dann liefert tKeyList.get(i) doch in beiden Fällen den gleichen Key. Und die Map sollte dann doch auch in beiden Fällen das gleiche Objekt liefert, so dass tColl1 = tCol2 ist.
 
S

Stefan79

Gast
Also, dies ist der gesamte Code in dem diese Collection genutzt wird. Weiter passiert damit nichts:
Code:
 for(int i = 0; i < iTableModel.getRowCount();i++)
	      {
          String tKey = (String)iTableModel.getValueAt(i,0);
         
	        Collection tCollection = (Collection) iFunctionTableModel.getValueAt(i,1);
	        if(tColl.isEmpty())
	        {
	          return;
	        }
	        else 
	        {
            tStoreMap.put(tKey, tCollection);
	        } 
	      }
      List tKeyList = new ArrayList();       
   for(int i = 0; i < iKeyModel.getRowCount();i++)
   {
        tKeyList = iKeyModel.getValueAt(i,0);
    }

          Collection tColl1 = tStoreMap.get(tKeyList(0);
          Collection tColl2 = tStoreMap.getKeyList(1);
          if (tColl1.containsAll(tColl2))
          {
               MessagePane.show(this, Zwei identische Tabelleneinträge sind nicht zulässig");
           }

Mehr wird wirklich nicht gemacht
 

Murray

Top Contributor
Diesen Code

Code:
      List tKeyList = new ArrayList();       
   for(int i = 0; i < iKeyModel.getRowCount();i++)
   {
        tKeyList = iKeyModel.getValueAt(i,0);
    }
könnte man ersetzen durch
Code:
List tKeyList  iKeyModel.getValueAt(iKeyModel.getRowCount()-1,0);
denn in der Schleife wird ja lediglich tKeyList immer neu zugewiesen.

Ist das wirklich so gewollt?


Und hier
Code:
         Collection tColl1 = tStoreMap.get(tKeyList(0);
         Collection tColl2 = tStoreMap.getKeyList(1);
passt ja nichtmal von Anzahl der Klammern.
 
S

Stefan79

Gast
Sorry, ein Tippfehler in der Eile.
Habe das ganze nun so gemacht, aber weiß halt nicht ob das wirklich so toll ist oder ob es zu Problemen kommen könnte:
Code:
if ( (tCompareColl != null) && (tComparatorColl != null) &&	      				                                                                           String.valueOf(tComparatorColl)).equalsIgnoreCase(String.valueOf(tCompareColl))))
{
     tueEtwas();
}

So würde es theoretisch funktionieren
 
S

Stefan79

Gast
Sorry, ein Tippfehler in der Eile.
Habe das ganze nun so gemacht, aber weiß halt nicht ob das wirklich so toll ist oder ob es zu Problemen kommen könnte:
Code:
if (String.valueOf(tColl1).equalsIgnoreCase(String.valueOf(tColl2))
{
    tueEtwas();
}
So würde es theoretisch funktionieren
 

Murray

Top Contributor
Sind tCompareCol und tComparatorCol jetzt die Collections? Dann ist das ziemlich schlecht - du verlässt dich hier darauf, dass die String-Repräsentationen der Collections genau dann gleich sind, wenn sie den gleichen Inhalt haben. Und davon kann man wohl i.d.R. nicht ausgehen.
 
S

Stefan79

Gast
Naja, mir kommt es aber rein auf den Inhalt an, wenn der Inhalt gleich ist, dann soll eine Meldung an den Benutzer kommen. Es kommt nicht darauf an, ob beide Collections identisch sind, sondern ich möchte nur wissen, ob ihr Inhalt gleich ist. Könnte man es dann so machen mit String.valueOf() ??
 

Murray

Top Contributor
Ob das funktioniert, hängt von der konkreten Implementierung der Collection sowie von den Inhalten der Collection ab. String#valueOf macht ja (sofern man ein Object als Parameter übergibt) nicht anders, als an diesem Object die Methode toString aufzurufen. Wenn die Collection jetzt z.B. eine ArrayList ist, dann erhält man einen String-Repräsentation, die wiederum aus den String-Repräsentationen der Elemente besteht, und zwar in der Reihenfolge, in der sie eingefügt wurden. Wenn jetzt noch sichergestellt ist, dass in der Liste solche objekte gespeichert sind, bei denen gilt, das zwei in deinem Sinne "gleiche" Objekte auch beim toString() den gleichen String liefern, dann wird es funktionieren.
 
S

Stefan79

Gast
mhh.....scheint ja doch sehr unsicher zu sein. Aber wie könnte ich denn dann den Inhalt zweier Collections oder auch Listen miteinander vergleichen. Wie gesagt ich will nur wissen, ob der Inhalt gleich ist der Rest kann ruhig unterschiedlich sein. Also wenn in Collection 1 "Hallo" drin steht und in Collection 2 auch "Hallo", dann sollte ich true zurück bekommen.
 

Murray

Top Contributor
Wenn du zwei Listen vergleichen willst, musst du sie elementweise vergleichen.

Code:
public boolean lstEqual( List lst1, Liste lst2) {

  if ( lst1 == null) return (lst2 == null);
  if ( lst2 == null) return false;

  int l1 = lst1.size();
  int l2 = lst2.size();
  if ( l1 != l2) return false;

  for ( int i=0; i<l1; i++) {
     Object o1 = lst1.get( i);
     Object o2 = lst2.get( i);
     if ( !o1.equals( o2)) return false;
  }

  return true;
}

Das liefert dann true, wenn alle Elemente übereinstimmen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Probleme mit Collection Allgemeine Java-Themen 7
C Probleme beim Erstellen eines runnable-jar files Allgemeine Java-Themen 1
S Umstellung von File auf Path - Probleme mit Stream Allgemeine Java-Themen 5
C Probleme mit javax.mail.Session Allgemeine Java-Themen 8
M tomcat probleme Allgemeine Java-Themen 1
N Division macht Probleme Allgemeine Java-Themen 14
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
MarvinsDepression Probleme mit relativem Dateipfad Allgemeine Java-Themen 1
G Geotools Probleme nach PC-Wechsel Allgemeine Java-Themen 6
nibe1501 GUI Probleme Allgemeine Java-Themen 16
C Probleme mit dem WindowBuilder Allgemeine Java-Themen 3
P Selenium . Probleme ein Iron Icon Element anzusprechen Allgemeine Java-Themen 2
B Compiler-Fehler Probleme beim Kompilieren mit Jsoup Allgemeine Java-Themen 8
K VisualVM Profiling Remote Probleme Allgemeine Java-Themen 1
O Leerzeichen und Umlaute im Pfad einer Java Applikation machen Probleme Allgemeine Java-Themen 13
M Probleme bei Eclipse wenn ich entpacke Allgemeine Java-Themen 15
D Regex Probleme Allgemeine Java-Themen 2
M Probleme jar datei. Allgemeine Java-Themen 2
L Vererbung Verständnis Probleme Vererbung Allgemeine Java-Themen 2
Dann07 Probleme mit OpenAL Allgemeine Java-Themen 0
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
V Compiler-Fehler Online Compiler Probleme Allgemeine Java-Themen 4
M Probleme mit Negamax-Algorithmus Allgemeine Java-Themen 29
M Probleme mit BigDecimal Allgemeine Java-Themen 1
T Probleme mit NumberFormat Allgemeine Java-Themen 5
J Probleme exe-Start mit Task Scheduler Allgemeine Java-Themen 1
B Input/Output Probleme beim Ausführen von Shell-Befehlen mit Java Allgemeine Java-Themen 28
J Probleme beim einbinden von Zip4j library Allgemeine Java-Themen 6
F Variablen Palindromzahl (Probleme mit Methode) Allgemeine Java-Themen 9
K Data Konverter - Probleme mit Byte[] Kodierung Allgemeine Java-Themen 3
T Probleme mit dem Pfad zum Propertie file Allgemeine Java-Themen 7
H Swing HashMap zu Tabelle macht mir Probleme Allgemeine Java-Themen 4
Neoline Interpreter-Fehler Probleme mit Arrays.toString Allgemeine Java-Themen 7
F SQLite mit Java / Probleme beim INSERT Befehl Allgemeine Java-Themen 4
J Erste Schritte Probleme mit der Hauptklasse Allgemeine Java-Themen 14
J Tetris Probleme bei Klassen Allgemeine Java-Themen 14
J MinMax VierGewinnt Probleme Allgemeine Java-Themen 22
J Probleme mit CodeCoverage und Lombok Equals Allgemeine Java-Themen 1
S Eclipse Probleme beim Implementieren / Ausführen von jUnit 5-Test Suites Allgemeine Java-Themen 14
R Snake Probleme Allgemeine Java-Themen 2
A Probleme beim Verstehen einer Aufgabenstellung Allgemeine Java-Themen 11
RalleYTN 3D Objekt Translation basierend auf Rotation (Probleme mit Z Rotation) Allgemeine Java-Themen 0
Bluedaishi Druck Probleme mit PDF dateien Allgemeine Java-Themen 4
G Ant Probleme bei einer Installation die Apache ant+ivy verwendet Allgemeine Java-Themen 14
E TableView Probleme Allgemeine Java-Themen 7
perlenfischer1984 Probleme beim Mocken Allgemeine Java-Themen 6
S Kaffemaschine Programmierung Probleme Allgemeine Java-Themen 2
K Threads Runtime und Process Probleme Allgemeine Java-Themen 3
S Probleme mit unterschiedlichen Java-Versionen (Mac OS X 10.11) Allgemeine Java-Themen 0
S Event Handling keyPressed()-Probleme Allgemeine Java-Themen 2
VfL_Freak Große und seltsame Probleme nach Java-Update auf V1.8.0_91 Allgemeine Java-Themen 3
P Probleme mit Grafik (Java) Allgemeine Java-Themen 6
R probleme beim starten von jar unter linux Allgemeine Java-Themen 2
H Probleme mit DAY_OF_WEEK Allgemeine Java-Themen 4
Arif Probleme mit NullPointerException Allgemeine Java-Themen 2
E Probleme mit nextInt() und Exception Allgemeine Java-Themen 35
Streeber Probleme mit AWT-EventQueue: ArrayList Elemente hinzufügen Allgemeine Java-Themen 1
D Performance-Probleme mit Joda-Time Allgemeine Java-Themen 3
M Probleme beim rechnen, bei Zahlen mit führenden Nullen. Allgemeine Java-Themen 7
RalleYTN Probleme mit Encrypting Allgemeine Java-Themen 10
M Probleme mit Schriftarten PDFBox Allgemeine Java-Themen 3
J Probleme mit der Java-Runtime Allgemeine Java-Themen 10
G Probleme mit BufferedWriter und URL Allgemeine Java-Themen 4
S Probleme mit meinem MacBook Pro DRINGEND HILFE erbeten! Allgemeine Java-Themen 17
Androbin Interpreter-Fehler Probleme mit Rekursion - StackOverflowError Allgemeine Java-Themen 8
E JCuda-0.6.5 Probleme beim ausführen der Datei Allgemeine Java-Themen 0
M Runtime.exec() verursacht auf manchen Systemen Probleme - Ursache unklar Allgemeine Java-Themen 2
W JNDI - LDAP - Probleme beim editieren von Usern Allgemeine Java-Themen 0
R DBUnit Performance Probleme Allgemeine Java-Themen 0
L Probleme mit Jar Allgemeine Java-Themen 6
N Zahlensysteme umrechnen; Probleme beim Umwandeln Allgemeine Java-Themen 4
K OOP OOP Gui Spiel + Vererbungen Probleme durch Nichtwissen!! Allgemeine Java-Themen 1
F Java Native/Shared Library (.so) laden macht Probleme Allgemeine Java-Themen 3
J Synchronized Probleme Allgemeine Java-Themen 7
J Java Progressbar & Download Probleme Allgemeine Java-Themen 10
S Probleme mit dem filechooser Allgemeine Java-Themen 1
J Comperator Probleme Allgemeine Java-Themen 4
A Probleme beim auslesen von Quelltext (HTML) Allgemeine Java-Themen 5
S Probleme mit Webappplikation Allgemeine Java-Themen 5
L Plötzlich Probleme mit der JVM :( Allgemeine Java-Themen 6
S starke performance probleme des forums Allgemeine Java-Themen 10
K Probleme bei Berechnung der Komplexität Allgemeine Java-Themen 7
R JRE Ablaufdatum seit 7u10 - Probleme bei selbst ausgelieferter JRE bekannt? Allgemeine Java-Themen 3
H Reg Exp Probleme Allgemeine Java-Themen 5
M Classpath Probleme bei JAR Generierung Allgemeine Java-Themen 2
S Probleme mit JAVA-Installation Allgemeine Java-Themen 3
D Probleme bei for-Schleife Allgemeine Java-Themen 4
R Probleme mit Javadoc Allgemeine Java-Themen 2
G Gson Probleme Allgemeine Java-Themen 2
P KI für TicTacToe programmieren > Probleme Allgemeine Java-Themen 2
M Google App Engine macht Probleme Allgemeine Java-Themen 4
H Probleme mit finally-Block und close() Allgemeine Java-Themen 4
F 2d array probleme Allgemeine Java-Themen 2
M 3D-Grafik Probleme beim drehen von Objekten Allgemeine Java-Themen 9
T Interface Probleme Allgemeine Java-Themen 8
C Eclipse Probleme bei selbst erstelltem Algorithmus Allgemeine Java-Themen 2
M Probleme mit String in Label übergeben. Allgemeine Java-Themen 6
H MediaManager Fragen/Probleme Allgemeine Java-Themen 6
U Probleme mit Kopiervorgang Allgemeine Java-Themen 3
S Probleme beim Auslesen einer Liste Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben