Mengen miteinander Vergleichen (Java)?
Guten Tag,
Ich habe gegeben:
int[] a;
LinkedList<int[]> b;
Wobei gilt:
a = { 1, 2, 3, 4 }
b = {
{ 1, 2, 3, 4 },
{ 5, 2, 3, 5 }
}
Es sollte jedenfalls so aussehen.
Nun möchte ich herausfinden, ob a in b enthalten ist. Wie gehe ich da heran?
Ich kann leider auf b nicht mit b[][] zugreifen.
Ich bedanke mich im Voraus.
6 Antworten
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;
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
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) -> {
// ...
});
Dafür gibt es die Arrays.equals-Methode.
Siehe https://www.geeksforgeeks.org/compare-two-arrays-java/
Also
if(Arrays.equals(a[i], b))