Prüfen Sie, ob eine ArrayList alle Elemente einer anderen ArrayList enthält

Lesezeit: 2 Minuten

Evorlors Benutzeravatar
Evorlor

Es gibt wahrscheinlich einen einfachen Einzeiler, den ich hier einfach nicht finde, aber das ist meine Frage:

Wie überprüfe ich, ob eine ArrayList alle Objekte in einer anderen ArrayList enthält? Ich suche (falls vorhanden) etwas in der Art von:

//INCORRECT EXAMPLE:
if(one.contains(two))
{
    return true;
}
else
{
    return false;
}

Zum Beispiel:

ArrayList one = {1, 2, 3, 4, 5}

ArrayList two = {1, 2, 3} --> True
ArrayList two = {} --> True
ArrayList two = {1, 2, 3, 4, 5} --> True
ArrayList two = {1, 5, 2} --> True
ArrayList two = {1, 7, 4} --> False
ArrayList two = {0, 1, 3} --> False
ArrayList two = {4, 5, 6} --> False
ArrayList two = {7, 8, 9} --> False

  • 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

Benutzeravatar von C-Otto
C-Otto

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.

Benutzeravatar von tckmn
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.

Sehen ArrayList#enthält.

BEARBEITEN: oh wow, hab ich total vergessen enthältAlle. Na ja, das ist ein alternativer Weg, es zu tun, wenn Sie es wirklich verstehen wollen.

Benutzeravatar von Piyush Aggarwal
Piyush Aggarwal

Dies kann auch mit Streams in Java erfolgen

    List<String> employeeList = Arrays.asList("Marc","john");
    List<String> masterEmployeeList = Arrays.asList("Marc", "Stacy", "john");
    System.out.println(employeeList.stream().allMatch(masterEmployeeList::contains));

1431470cookie-checkPrüfen Sie, ob eine ArrayList alle Elemente einer anderen ArrayList enthält

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy