Zum Inhalt springen

Objekte in ArrayLists vergleichen


cable545

Empfohlene Beiträge

hallo,

ich hab ein kleines problem.

ich hab drei ArrayLists in welche sich einige Objekte befinden. ich möchte nun schauen ob sich ein objekt aus einer ArrayList auch in den anderen beiden ArrayLists befindet. ich hab das jetzt irgendwie mit geschachtelten schleifen und der equals methode versucht. nur verlier ich da dann irgendwann den überblick. hat da vieleicht jemand eine besondere effiziente lösung oder einen ansatz?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich würde hier erst einmal die Frage stellen, ob eine ArrayList überhaupt die richtige Datenstruktur für das Vorhaben ist.

Aufgrund der Informationen würde ich wohl eher zu einer Hashmap/IdentityHashMap mit ggf passender Hash-Implementierung raten.

Eine Implementierung via Arraylist ist zu dem ein O(n^2) Algorithmus, denn wenn jedes Objekt mit jedem verglichen werden muss, muss man mind. mit 2 Schleifen arbeiten, wobei man das dritte Array direkt in der innersten Schleife mit vergleichen kann und ggf fehlende Elemente nachiteriert, macht also im Limit O(n^2). Somit würde eine andere Datenstruktur sinnvoll sein

Bearbeitet von flashpixx
Link zu diesem Kommentar
Auf anderen Seiten teilen

Um noch mal am Anfang zu beginnen: was hast Du, was willst Du, und was ist Dein Problem. Aus Deiner Problembeschreibung kann ich nicht erkennen, was *genau* bei Dir nicht funktioniert.

Im Allgemeinen ist es wichtig, dass bei Objektvergleichen (inhaltlich) die Methoden equals() und hashCode korrekt überschrieben sind. Erster Google Hit: AngelikaLanger.com - Implementing the hashCode() Method - Angelika Langer Training/Consulting

Schöne Grüße,

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mit dieser Methode könntest du gucken ob ein Object in der Liste enthalten ist.

Die contains-Methode wird aber auch das Array bis zum Ende bzw bis zu dem Objekt das gesucht wurde durchlaufen, d.h. worst-case sind es auch n Durchläufe. Für eine bestehende Arraylist aus m Elementen macht das dann m contains-Aufrufe, d.h. O(n*m) im Limit also ein O(n^2) Algorithmus. Eine Arraylist ist keine geordnete Datenstruktur, darum ist eine entsprechende Suche eben immer nur möglich, wenn man alle Elemente durchläuft.

Wie kingofbrain schrieb, hash-Methode bzw equals-Methode passend überladen und dann eine geordnete Datenstruktur verwenden, wie z.B. eine HashMap in der die Suchalgorithmen effizienter implementiert sind.

Sonst schließe ich mich kingofbrain an, dass der OP bitte das Problem genauer definiert

Link zu diesem Kommentar
Auf anderen Seiten teilen

ok, dann hier die genaue beschreibung..

ich hab ungefähr 30 Person-Objekte. diese objekte haben die attribute vorname, nachname, Plz und geburtsdatum. ich hab jetzt die 30 person-objekte in drei mengen unterteilt und in eine jeweilige ArrayList gepackt. also hab ich drei ArrayLists mit den namen studenten, verwandte und sportfreunde. nun ist es aber so, dass manche personen-objekte in mehreren mengen...also arraylists vertreten sind. und jetzt möchte ich also alle person-objekte auflisten(also mit den attributen), inklusive einer information in welcher menge(arraylist) sich dieses objekt überall befindet.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo

so wie ich es verstehe, geben diese 3 Kategorien die Stellung der Personen zu einer anderen Person an. Hierbei kann es ja durchaus sein, dass eine Person in mehreren dieser Mengen enthalten ist, also z.B. wenn sie sowohl Verwandter als auch Sportfreund ist.

Ich würde an dieser Stelle einmal ernsthaft überlegen, im Sinne der OOA/OOD dieses als Rollen abzubilden, so dass jede Person genau einmal existiert aber eine Vielzahl von Rollen einnehmen kann.

Das spart auch wieder Aufwand und verhindert Probleme, wenn sich z.B. durch Heirat, Umzug etc. die Personenattribute ändern.

Gruß Martin

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...