387 Stimmen

Etwas wie 'enthält jede' für Java-Set?

Ich habe zwei Sätze, A und B, desselben Typs.

Ich muss herausfinden, ob A irgendein Element aus der Menge B enthält.

Wie lässt sich das am besten bewerkstelligen, ohne über die Mengen zu iterieren? Die Set-Bibliothek hat contains(object) y containsAll(collection) , aber nicht containsAny(collection) .

5voto

Suresh Kumar Punkte 10331

Utilice retainAll() in der Schnittstelle Einstellen. Diese Methode liefert eine Schnittmenge von Elementen, die in beiden Sets gemeinsam sind. Weitere Informationen finden Sie in den API-Dokumenten.

3voto

Zéychin Punkte 4011

Ich würde empfehlen, eine HashMap aus der Menge A, dann wird die Menge B durchlaufen und geprüft, ob ein Element von B in A enthalten ist. Dies würde in O(|A|+|B|) Zeit (da es keine Kollisionen geben würde), während retainAll(Collection<?> c) muss laufen in O(|A|*|B|) Zeit.

3voto

Plap Punkte 1017

Es gibt eine etwas grobe Methode, das zu tun. Wenn und nur wenn die Menge A einige Elemente von B enthält, dann ist der Aufruf

A.removeAll(B)

wird die Menge A geändert. In dieser Situation wird removeAll true zurückgeben (wie unter removeAll docs ). Aber wahrscheinlich wollen Sie den A-Satz nicht ändern, so dass Sie auf eine Kopie zurückgreifen können, etwa so:

new HashSet(A).removeAll(B)

und der Rückgabewert ist wahr, wenn die Mengen nicht unterschiedlich sind, d. h. eine nicht leere Schnittmenge haben.

Siehe auch Apache Commons Sammlungen

2voto

Artem Punkte 4317

Sie können verwenden beibehaltenAlle Methode und ermitteln Sie die Schnittmenge der beiden Mengen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X