Vector und doppelte Einträge löschen?



  • Hallo,
    ich habe ein kleines Problem. Im moment suche ich nach einer eleganten Lösung. Leider bin ich noch nicht der Freak unter Java :). Also, ich habe einen Vektor. In diesem Vektor befinden sich sehr viele doppelte Einträge. Was ich nun möchte, ist alle doppelten Einträge zu löschen. Irgendwie bekomme ich das aber nicht hin. Wenn ich einen doppelten Eintrag lösche, wird beim nächsten durchlauf eine Exception ausgeworfen. Eigentlich müsste es doch so ähnlich wie beim BubbleSort funktionieren aber ich komme einfach nicht dahinter.

    Vielleicht kann mir jemand helfen bei meinem Problem... 🙂

    Grüßle
    Mike



  • Warum wird man, sobald ein bisschen Ahnung von etwas hat, gleich als "Freak" bezeichnet? Ich bevorzuge für mich die Bezeichnung "Wizard"! ;P

    Also das dürfte doch nicht so schwer sein. Nur inwiefern sollen die Einträge denn gleich sein? Referenzen auf ein und dasselbe Objekt (==?) oder eher Objekte mit gleichem Inhalt (equals()?)?
    Aber wie dem auch sei. Du musst doch nur alle Elemente in einer Schleife durchlaufen und bei jedem Element nochmal den ganzen Vektor durchgucken ob was gleiches dabei ist, wenn ja remove(i), fertig.

    Warum bei dir eine Exception fliegt, kann man nur vermuten. Wenn man nicht mal weiß, was für eine Exception fliegt, ist das aber noch schwerer, als es ohne Code sowieso schon ist.
    Also?



  • Moin Moin

    ersetze doch den Vektor durch einen Hashtable.
    So kannst du als Key die Equal Bedingungs setzen und kannst so keine doppelten Werte einfügen. Verhinderung des Problemes bevor es auftritt.
    Überlege wie gleich die Objekte sein sollen (siehe vorposter).

    cu CodeHure



  • Ich tippe mal bei der Exception auf ne OutOfBounds / -Range ... das kann passieren wenn du bei einem Vector Elemente entfernst und die restlichen Elemente nachrutschen:

    Vector vec;
    int len = vec.size();
    for(int i = 0;i < len;i++)
       if(bla) vec.removeElementAt(i);
    

    Da würde es sich anbieten die Schleife reverse laufen zu lassen: i--;

    Aber ohne Präzisierung kann ich natürlich auch nur spekulieren 😃

    MFG John



  • In dem Fall wäre es am einfachsten, es folgender Maßen zu machen:

    for (int i = 0; i < vector.size(); ++i) {
        ...
    }
    


  • Oder sei up-to-date 😃

    Vector<String> foo = new Vector<String>();
    
    for(String bar : foo) {
       //foobar
    }
    


  • Hi,
    danke für die guten antworten. Der Tip mit der HashMap hat mich weitergebracht. Zwar verwendete ich die HashSet aber das dürfte egal sein. Hauptsache es funktioniert 🙂

    Grüßle und Danke nochmals 🙂

    Mike


Anmelden zum Antworten