Doppelte Einträge aus ArrayList entfernen

Hallo!

Ich habe eine ArrayList befüllt mit Objekten von der Klasse . Sprich: beim Befüllen der Liste übergebe ich zwei Strings, die mein Objekt bilden. [String Element, String dazugehörigerPfad]

Wirklich seeeehr viel Googlen sagt mir, dass es am besten wäre die ArrayList in ein TreeSet oder HashMap zu übergeben, sortieren und dann wieder in eine ArrayList überzuführen.
Das habe ich versucht, allerdings kommt bei mir immer eine Fehlermeldung, dass sich Methoden wie Sort, Contains, etc nicht anwenden lassen.

Wie mache ich das nun - doppelte Einträge in meiner ArrayList löschen? Der Vergleich kann sich auch nur auf einen Teil des Objekts beziehen - d.h. ich könnte auch nur den String Pfad vergleichen und anhand davon das ganze Objekt löschen…

Bin noch nicht so sattelfest in Java und würde mich wirklich sehr über ein paar Zeilen Code freuen … es muss sich hierbei nicht um oben beschrieben Methode handeln - bin offen für alles! :smile:

Danke schon mal im Voraus!

LG,
EV*A

Hey EV*A,

auch wenn diese Anwort eventuell etwas spät kommt, würde ich dir auch HashMaps empfehlen. Das hat den Grund, dass eine HashMap keine doppelten Werte (zumindest Keys) enthalten kann/darf.

Ein kleines Beispiel:

HashMap person = new HashMap () ; (HashMap)

person.put(name, alter);  // Person hinzufügen

Würde man in diesem Beispiel mehrere Müller hinzufügen, würden diese immer überschrieben werden (mit dem neusten). Mit person.containsKey(key) kann man prüfen, ob ein key schon vorhanden ist (in diesem Fall die Namen) und mit person.containsValue(value) kann man prüfen, ob die HashMap schon einen bestimmten Wert besitzt.

Nun zu deinem Fall:
Du könntest eine klassenweite HashMap erstellen, die mit getter und setter befüllt werden kann. Diese könntest du dann mit einer Methode, in der eine For-Schleife über alle Values geht, in eine Liste stopfen und mit der dann machen, was du willst.

Beispielklasse:

   public class Test {
    
       private HashMap elemente = new HashMap ();
    
       public HashMap getElemente(){
           return elemente;
       }
    
       public void setElement (String pfad, Parser element){
           elemente.put(pfad, element);
      }
    
       public ArrayList elementToList(){
           ArrayList liste = new ArrayList();
        
           for(Parser element : elemente.values()){
               liste.add(element);
           }
            
           return liste;
       }
   }

Aufgrund der Pfade als Keys, sollte es keine doppelten Elemente (und Pfade) geben.

Ich hoffe ich konnte dir ansatzweise behilflich sein.

Viele Grüße
Matth1as

Vom  ersten Element der Liste ausgehen. Den Rest durchgehen; wenn ein Element gleich dem ersten ist, es entfernen. Dann das gleiche mit dem zweiten Element machen, usw…  Dann hast Du alle mehrfach vorkommenden Elemente entfernt!

Dann hast Du alle mehrfach vorkommenden Elemente entfernt!

und noch dazu eine (in der Anzahl der Listenelemente) quadratische Laufzeit, was bei großen Listen schon ganz schön lange dauern kann.
HashSets oder Maps sind hier wirklich besser geeignet, da diese in nahezu konstanter Zeit prüfen können, ob ein Element vorhanden ist. Deswegen kommt man dadurch auf nahezu lineare Zeitkomplexität.

Hallo!

Danke für die umfangreiche Antwort! :smile:
Konnte das Problem inziwschen selbst lösen.

LG;
EV*A