Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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?

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

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

Hi,

ArrayList (Java 2 Platform SE v1.4.2)

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

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

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.

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.

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

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 Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.