Vector mit doppelten Einträgen

Dox

Mitglied
Hallo,

habe ein kleines Problem.

Wie kann ich doppelte Einträge aus einem Vector filtern bzw. löschen?
(Vector hat nur Strings)

Ich hoffe mir kann Jemand hier helfen.
 
Hallo!

Siehe:
Code:
/*
 * Created on 13.10.2004
 */
package de.tutorials;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.Vector;

/**
 * @author Darimont
 *  
 */
public class Test08 {

    public static void main(String[] args) {
        Vector v = new Vector();
        v.add("a");
        v.add("a");
        v.add("b");
        v.add("a");
        v.add("c");
        v.add("d");
        v.add("c");

        Set set = new HashSet(v);
        for (Iterator iter = set.iterator(); iter.hasNext();) {
            System.out.println(iter.next());
        }

    }
}

bzw. so:
/*
 * Created on 13.10.2004
 */
package de.tutorials;

import java.util.HashSet;
import java.util.Set;
import java.util.Vector;

/**
 * @author Darimont
 *  
 */
public class Test08 {

    public static void main(String[] args) {
        Vector v = new Vector();
        v.add("a");
        v.add("a");
        v.add("b");
        v.add("a");
        v.add("c");
        v.add("d");
        v.add("c");
        v.add("a");
        Set set = new HashSet(v);
        v = new Vector(set);
        System.out.println(v);
    }
}
...oder verwende gleich eine Set Implementierung ... as Vincentius just said.
Gruß Tom
 
Hi!

Benutze keinen Vector, sondern ein Collectiontyp der von Anfang an keine doppelten Einträge zulässt, wie alle Klassen, die das Interface Set implementieren (z.B. HashSet).

Kommst du nicht um die Verwendung von einem Vector herum, dann kannst du ihn folgendermassen von doppelten Einträgen säubern

Code:
      Vector vec = new Vector();
      vec.add("bla");
      vec.add("bla");
      HashSet set = new HashSet();
      for (int i = vec.size() - 1; i >= 0; i--) {
         if (!set.add(vec.elementAt(i))) {
            System.out.println("Element " + i + " gabs schon");
         }
      }

Das set enthält dann keine doppelten Einträge mehr.
Die for-Schleife ist eigentlich eine ganz normale for-Schleife, die bloss eine kleine Optimierung enthält. Sozusagen als kleiner Denkanstoss ;)

Grüsse TrueSun

edit:
Weia, wie langsam poste ich denn?!
Und der Konstruktoraufruf new HashSet(new Vector()); ist wahrscheinlich das einfachste und beste.
 
Zurück