Es gibt eine Methode namens containsAll erklärt in der java.util.Collection Schnittstelle. In deiner Einstellung one.containsAll(two) gibt die gewünschte Antwort.
Per List-Schnittstelle:
myList.containsAll(...);
Schauen Sie sich an containsAll(Collection<?> c) Methode aus List Schnittstelle. Ich denke, es ist das, wonach Sie suchen.
Hier ist ein weiteres Beispiel für die Verwendung von containsAll(), das ich verwendet habe, um zu behaupten, dass zwei Arrays beim JUnit-Testen gleich sind:
List<String> expected = new ArrayList<String>();
expected.add("this");
expected.add("that");
expected.add("another");
List<String> actual = new ArrayListString();
actual.add("another");
actual.add("that");
actual.add("this");
Assert.assertTrue("The lists do not match!", expected.containsAll(actual));
Sie können verwenden containsAll Methode der Liste, um die Prüfung durchzuführen. Dies ist jedoch ein linearer Vorgang. Wenn die Liste groß ist, sollten Sie sie konvertieren HashSet zuerst und dann durchführen containsAll:
HashSet tmp = new HashSet(one);
if (tmp.containsAll(two)) {
...
}
Wenn die Länge von one ist N und die Länge von zwei ist Mdiese Lösung hat eine zeitliche Komplexität von O(M+N); das “einfache” containsAll hat die Komplexität von O(M*N)was deutlich schlimmer sein kann.
tckmn
Ihr Code im Beispiel ergibt keinen Sinn, aber hier ist trotzdem ein Beispiel.
ArrayList<Integer> one, two;
//initialize
boolean good = true;
for (int i = 0; i < two.size(); i ++) {
if (!(one.contains(two.get(i))) {
good = false;
break;
}
}
Es durchläuft einfach alle two‘s Elemente und prüft, ob sie drin sind one.
Dann der boolesche Wert good enthält den gewünschten Wert.
in diesem Fall möchten Sie containsAll (bereits eine Antwort)
– Hauben
24. Januar 2013 um 22:08 Uhr
Und Sie können Ihre if-Anweisung auf eine Zeile reduzieren:
return one.containsAll(two);
– Code-Lehrling
25. Januar 2013 um 0:40 Uhr
Siehe auch: meta.stackoverflow.com/q/382499/1889720
– Evolor
8. April 2019 um 12:55 Uhr