Mengen miteinander Vergleichen (Java)?

6 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Du solltest zuerst eine Methode erstellen, die überprüft, ob zwei "normale" Mengen (also keine Mengensystem) gleich sind.

Ich nehme hier an, dass die beiden Mengen als eindimensionale arrays m und n vorliegen.

1) Um das zu überprüfen, kannst du zuerst überprüfen, ob die Mengen die gleiche Anzahl an Elementen haben (kannst du in Java mit .length überprüfen). Falls nicht, sind die Mengen nicht gleich.

if(a.length != b.length) {
    return false;
}

2) Dann kommt es darauf an, wie du die Äquivalenz definierst. Am einfachsten zu überprüfen ist, ob jedes Element der beiden Mengen gleich ist. (Bei anderen Definition musst du den Algorithmus natürlich dementsprechend verändern)

Wenn du die Mengen mit zwei Arrays implementierst, also:

for(int i = 0; i < a.length; i++) {
    if(a[i] != b[i]) {
        return false;
    }
}
return true;

3) Wenn nun b ein Mengensystem ist und wir den Algorithmus 1) - 2) als methode

boolean setsEqual(int[] m, int[] n) {...}

implementieren, dann kannst du wie folgt überprüfen, ob die Menge m im Mengensystem b vorkommt.

for(int i = 0; i < b.length; i++) {
    if(setsEqual(b[i], m)) {
        return true;
    }
}
return false;
Woher ich das weiß:Studium / Ausbildung – Habe einen Bachelor in Informatik
public static void main(String[] args) {
  int[] a = new int[] { 1, 2, 3, 4 };
  LinkedList<int[]> b = new LinkedList<>();
  
  b.add(new int[] { 1, 2, 3, 4 });
  b.add(new int[] { 5, 2, 3, 1 });
  
  for (int[] i : b)
    if (Arrays.equals(i, a))
      System.out.println("gleich");
}
Set<String> set = new HashSet<>();
set.addAll(Arrays.asList("leo","bale","hanks"));

Set<String> set2 = new HashSet<>();
set2.addAll(Arrays.asList("hanks","leo","bale"));

Predicate<Set> pred = set::equals;
boolean result = pred.test(set2);
System.out.println(result);   // true

MadMarvin007  11.05.2019, 20:50

Ich antworte gerne, wenn eh keiner drauf eingeht...

1

Schau dir die LinkedList-Klasse an. Sie bietet Methoden, um an Elemente bestimmten Indizes zu kommen (get). Das heißt, du könntest auch mit einer normalen Schleife über diese Struktur laufen.

Das würde ebenso über einen Iterator funktionieren, denn die Klasse implementiert das Iterable-Interface:

for (Iterator iterator = list.iterator(); iterator.hasNext();) {
  // ...
}

Aufgrund des vorhandenen Iterators könnte man dies mit einer foreach-Schleife oder mit der Stream API (ab Java 8) abkürzen.

list.forEach((item) -> {
  // ...
});