Zum Inhalt springen

Objekte in ArrayLists vergleichen


Empfohlene Beiträge

Geschrieben

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?

Geschrieben (bearbeitet)

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
Geschrieben

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

Geschrieben

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

Geschrieben

Ja klar, da bin ich eurer Meinung, aber falls er unbedingt die Liste nutzen möchte, kennt er jetzt die Methode damit er die schleifen nicht alle selbst schreiben muss.

Geschrieben

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.

Geschrieben

Gut, jetzt wissen, wir, was Du willst. Fehlt noch, was Du hast, was daran falsch ist und was Du erwartest. Ansonsten bleibts bei den allgemeinen Tipps "Datenstruktur" und "equals() / hashCode()".

Peter

Geschrieben

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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...