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?

1voto

Vinze Punkte 2529

Wie bereits gesagt, sollten Sie eine Klasse verwenden, die die Schnittstelle Set anstelle von List implementiert, um die Eindeutigkeit der Elemente zu gewährleisten. Wenn die Reihenfolge der Elemente beibehalten werden muss, kann die Schnittstelle SortedSet verwendet werden; die Klasse TreeSet implementiert diese Schnittstelle.

0voto

Sameer Shrestha Punkte 99

Zeitkomplexität: O(n) : Ohne Menge

private static void removeDup(ArrayList<String> listWithDuplicateElements) {
    System.out.println(" Original Duplicate List :" + listWithDuplicateElements);
    List<String> listWithoutDuplicateElements = new ArrayList<>(listWithDuplicateElements.size());

    listWithDuplicateElements.stream().forEach(str -> {
        if (listWithoutDuplicateElements.indexOf(str) == -1) {
            listWithoutDuplicateElements.add(str);
        }
    });     

    System.out.println(" Without Duplicate List :" + listWithoutDuplicateElements);
}

0voto

seekingStillness Punkte 4304

Dies ist die richtige Lösung (wenn Sie sich Sorgen um den Overhead von HashSet machen).

 public static ArrayList<String> removeDuplicates (ArrayList<String> arrayList){
    if (arrayList.isEmpty()) return null;  //return what makes sense for your app
    Collections.sort(arrayList, String.CASE_INSENSITIVE_ORDER);
    //remove duplicates
    ArrayList <String> arrayList_mod = new ArrayList<>();
    arrayList_mod.add(arrayList.get(0));
    for (int i=1; i<arrayList.size(); i++){
        if (!arrayList.get(i).equals(arrayList.get(i-1))) arrayList_mod.add(arrayList.get(i));
    }
    return arrayList_mod;
}

0voto

saif Punkte 879
Set<String> strSet = strList.stream().collect(Collectors.toSet());

Ist der einfachste Weg, um Ihre Duplikate zu entfernen.

0voto

LiNKeR Punkte 797

Wenn Sie möchten, dass Ihre Liste automatisch Duplikate ignoriert und ihre Reihenfolge beibehält, können Sie eine HashList (eine in eine HashMap eingebettete Liste).

public static class HashList<T> extends ArrayList<T>{
        private HashMap <T,T> hashMap;
        public HashList(){
            hashMap=new HashMap<>();
        }

        @Override
        public boolean add(T t){
            if(hashMap.get(t)==null){
                hashMap.put(t,t);
                return super.add(t);
            }else return false;
        }

        @Override
        public boolean addAll(Collection<? extends T> c){
            HashList<T> addup=(HashList<T>)c;
            for(int i=0;i<addup.size();i++){
                add(addup.get(i));
            }return true;
        }

    }

Usage Example:

HashList<String> hashlist=new HashList<>();
hashList.add("hello");
hashList.add("hello");
System.out.println(" HashList: "+hashlist);

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