Wie funktioniert Java schnell vergleichen zwei-Kollektion sind genau das gleiche in Java?
Wie funktioniert Java schnell vergleichen zwei-Kollektion sind genau das gleiche in java?
Beispiel:
wenn diese Sammlung Eingestellt ist, vergleichen Sie Ihre enthalten das gleiche Objekt und Ihre Größe sind die gleichen.
Code sieht wie folgt
public boolean isSameSets(Set<T> set1, Set<T> set2){
if (set1.size() != set2.size()) {
return false;
}
return set1.containAll(set2) && set2.containAll(set1);
}
Aber wenn die collection ist eine Liste, denn die Liste ist sortiert-Sammlung, können wir die Iteration zu vergleichen, jedes element, ich denke, dass dieser Weg nicht der beste, wer könnte mir bitte sagen, wie schnell Sie vergleichen?
========================================================
Danke an alle, eigentlich, Sammlung equals-Methode kann dies tun, Set und List.
was ist falsch mit [Sammlung::equals](docs.oracle.com/javase/1.4.2/docs/api/java/util/...?
InformationsquelleAutor Liu guanghua | 2012-09-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sammlung
equals(Object)
Methode sollte dies für Sie tun. Die javadoc genau erklärt, was "gleich" bedeutet, dass für eine Sammlung, und die Semantik sind weiter verfeinert und für die Schnittstellen, die Sie erweitern Sammlung.Verschiedenen collection-Klassen haben Ihre eigenen Implementierungen dieser Methode, optimiert für Ihre jeweilige semantische Modelle und Darstellungen. So zum Beispiel, die
equals
Methode auf eineList
berücksichtigt das element Ordnung, aber dieequals
Methode auf eineSet
würde in der Regel nicht.Jemand fragt:
Im Allgemeinen, Nein. Zum Beispiel, zwei Listen, die die gleichen Elemente sind nicht notwendigerweise gleich. Sie müssen auch prüfen, die Liste um. (Und außerdem, mit
containsAll
um Ihre Listen zu vergleichen istO(N^2)
wo eine effizienteequals
Umsetzung für eineList
sollteO(N)
... im schlimmsten Fall).Das gleiche gilt für die Verwendung von
retainsAll
.equals
Methode auf eineSet
nicht überprüfen Sie das element, um durch die definition einerSet
🙂Sie müssen vorsichtig sein, mit Aussagen wie, dass. Es hängt davon ab, wie eng die Umsetzung Klasse folgt der Buchstabe / Geist der
Set
Vertrag. Das ist, warum ich sagte, meine Antwort, wie ich es Tat.Das ist fair genug 😉
Aber
equals
funktioniert nicht auf zweiCollection<>
Objekte, wenn einer von Ihnen (zum Beispiel) ist eine benutzerdefinierte Klasse, dieextends AbstractCollection<Integer>
. Was dann?InformationsquelleAutor Stephen C
Den
HashSet.equals
Methode führt bereits Vergleiche, um sicherzustellen, es sind die genau gleichen Elemente, die in jedem Satz. DieArrayList.equals
bedeutet das gleiche, außer es wird auch überprüft, Bestellung.Im wesentlichen überprüft der Schnittpunkt der beiden Sammlungen. Sie müssen auch prüfen, die Größe, die
equals
bereits. Sie müssen auch prüfen, die Bestellung aufList
s.ok kool.. ich nur für eine minute dachte, es würde Sie beide der Sammlungen. +1 für dich 🙂
Danke, ArrayList.gleich kann es tun, enthalten, Art und Größe zu vergleichen.
InformationsquelleAutor Tim Pote
Auch erwägen, Google Guava-Bibliothek:
Gibt true zurück, wenn der iterables haben die gleichen Elemente in der gleichen Reihenfolge.
Auch wenn Sammlungen sind HashSet, wo die Reihenfolge ist nicht predifined, aber die Anzahl der Elemente ist die gleiche und die Elemente gleich sind, während der Iteration werden Sie feststellen, dass die Reihenfolge der beiden Sätze ist dieselbe, vorausgesetzt mit der richtigen
hashCode
undequals
Methoden.InformationsquelleAutor Alexandr
Können Sie Sammlung.retainAll()
Collection.retainAll()
DerCollections
Klasse unterscheidet sich von derCollection
Klasse.oops typo (Fest) 😀
InformationsquelleAutor gtgaxiola