563 Stimmen

Wie kann ich wiederholte Elemente aus ArrayList entfernen?

Ich habe eine ArrayList<String> und ich möchte wiederholte Zeichenfolgen daraus entfernen. Wie kann ich das tun?

0voto

Gil SH Punkte 3571

Hier ist eine Lösung, die mit jedem Objekt funktioniert:

public static <T> List<T> clearDuplicates(List<T> messages,Comparator<T> comparator) {
    List<T> results = new ArrayList<T>();
    for (T m1 : messages) {
        boolean found = false;
        for (T m2 : results) {
            if (comparator.compare(m1,m2)==0) {
                found=true;
                break;
            }
        }
        if (!found) {
            results.add(m1);
        }
    }
    return results;
}

0voto

Kirguduck Punkte 659

Kotlin

val list = listOf('a', 'A', 'b', 'B', 'A', 'a')
println(list.distinct()) // [a, A, b, B]
println(list.distinctBy { it.uppercaseChar() }) // [a, b]

von hier kotlinlang

0voto

Ravi Vital Punkte 1

Würde so etwas besser funktionieren?

public static void removeDuplicates(ArrayList<String> list) {
    Arraylist<Object> ar     = new Arraylist<Object>();
    Arraylist<Object> tempAR = new Arraylist<Object>();
    while (list.size()>0){
        ar.add(list(0));
        list.removeall(Collections.singleton(list(0)));
    }
    list.addAll(ar);
}

Das sollte die Reihenfolge beibehalten und auch nicht quadratisch in der Laufzeit sein.

0voto

neo7 Punkte 634

Hier ist meine Antwort, ohne eine andere Datenstruktur wie Set oder Hashmap usw. zu verwenden.

public static <T> ArrayList<T> uniquefy(ArrayList<T> myList) {

    ArrayList <T> uniqueArrayList = new ArrayList<T>();
    for (int i = 0; i < myList.size(); i++){
        if (!uniqueArrayList.contains(myList.get(i))){
            uniqueArrayList.add(myList.get(i));
        }
    }

    return uniqueArrayList;
}

0voto

sharkbait Punkte 2791

Die Lösung von @jonathan-stafford ist in Ordnung. Aber die Reihenfolge der Liste wird nicht beibehalten.

Wenn Sie die Reihenfolge der Liste beibehalten wollen, müssen Sie dies verwenden:

public static <T> void removeDuplicate(List <T> list) {
Set <T> set = new HashSet <T>();
List <T> newList = new ArrayList <T>();
for (Iterator <T>iter = list.iterator();    iter.hasNext(); ) {
   Object element = iter.next();
   if (set.add((T) element))
      newList.add((T) element);
   }
   list.clear();
   list.addAll(newList);
}

Es geht nur darum, die Antwort zu vervollständigen. Sehr gut!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X