Neue Menge aus zwei Mengen konstruieren

Klaus

Mitglied
Hallo,

ich habe schon wieder ein Problem.
Ich würde gerne aus zwei ArrayLists von ArrayLists eine ArrayList von ArrayLists machen mit folgender Regel:
Sind zwei Objekte vorher in derselben ArrayList, kommen sie wieder in dieselbe ArrayList.
Das ist jetzt vielleicht ein wenig verwirrend, deshalb mach ich mal ein Beispiel.

ArrayList1: [[1,2,3],[4,5],[6]]
ArrayList2: [[2,3],[1,4,5],[6]]

Die neue ArrayList soll nun so aussehen: [[1],[2,3],[4,5],[6]]
Die [1] steht alleine, weil kein weiteres Element der ArrayList (also weder 2 noch 3), in der sie in ArrayList1 steht, in der ArrayList steht, in der sie in ArrayList2 ist (weil da nur noch 4 und 5 sind).
[2,3] deshalb zusammen, weil sie sowohl in ArrayList1, als auch in ArrayList2 in derselben ArrayList stehen. usw.
Wäre gut, wenn jemand einen eleganten Vorschlag hätte, weil ich hier grad mit 4 verschachtelten Schleifen rumhantiere und trotzdem nicht das richtige raus kommt.

Viele Grüße
Klaus
 
sind immer gleiche Anzahl und gleiche Elemente in beiden Listen garantiert? ansonsten mein unteres Verfahren erweitern,
genauer merken was aus der zweiten Liste schon verarbeiter wurde, was noch fehlt

durchlaufen wird ArrayList1,
für ArrayList2 vorher zur besseren Durchsuchung eine Map anlegen, Zahl -> Gruppe dieser Zahl,
außerdem fürs Ergebnis auch eine derartige Map, je Zahl auf zugehörige Gruppe/ Liste verweisen

ArrayList1 nach allen Gruppen durchlaufen, jede Gruppen (g1) nach allen Zahlen
(schon zwei Schleifen, aber so ist das eben, notfalls Untermethoden, immer sauberer, nur viele Parameter zu übergeben oder Klassenattribute)
für jede Zahl:
wenn die erste dieser Gruppe, dann in jedem Fall eine neue Ergenissgruppe anlegen, Map der Ergebnisse aktualisieren
ansonsten ab der zweiten Zahl: Gruppe aus ArrayList2 holen (g2), und für alle VORHERIGEN Zahlen derselben Gruppe g1 prüfen (dritte Schleife), ob diese in g2 sind,
wenn ein solcher Treffer gefunden, dann die aktuelle Zahl in der bereits vorhandenen Ergebnissgruppe des Treffers speichern (edit: und fertig für aktuell bearbeitete Zahl),
wenn kein Treffer für alle vorherigen Zahlen (aus g1), dann neue Ergebnissgruppe anlegen
 
Zuletzt bearbeitet von einem Moderator:
So, habe es jetzt anders gemacht.
Ich nehme das erste Element von der ersten ArrayList (hier genannt a1) von ArrayList1 und schaue, wo dies in ArrayList2 auftaucht (genannt b1).
Dann speichere ich dieses Element in einer Hilfs-ArrayList. Danach vergleiche ich jedes Element von a1 mit jedem Element von b1 und speichere alle übereinstimmende auch in der Hilfs-ArrayList.
Gibt es keine weiteren Übereinstimmungen, füge ich die Hilfs-ArrayList der Ziel-ArrayList hinzu und schaue mir das nächste Element von ArrayList1 an. Alle bereits in der Ziel-ArrayList gespeicherten Elemente merke ich mir in einem bool-Array.#
 

Zurück
Oben