Πώς μπορώ να αφαιρέσω επαναλαμβανόμενα στοιχεία από ArrayList;

Έχω μια ArrayList<String>, και θέλω να αφαιρέσω επαναλαμβανόμενες συμβολοσειρές από αυτήν. Πώς μπορώ να το κάνω αυτό;

Λύση

Αν δεν θέλετε διπλότυπα σε μια Συλλογή, θα πρέπει να σκεφτείτε γιατί χρησιμοποιείτε μια Συλλογή που επιτρέπει διπλότυπα. Ο ευκολότερος τρόπος για να αφαιρέσετε επαναλαμβανόμενα στοιχεία είναι να προσθέσετε τα περιεχόμενα σε ένα Set (το οποίο δεν θα επιτρέπει διπλά) και στη συνέχεια να προσθέσετε το Set πίσω στο ArrayList:

Set set = new HashSet(yourList);
yourList.clear();
yourList.addAll(set);

Φυσικά, αυτό καταστρέφει τη διάταξη των στοιχείων της ArrayList.

Σχόλια (16)

Αν και η μετατροπή της ArrayList σε HashSet αφαιρεί αποτελεσματικά τα αντίγραφα, αν πρέπει να διατηρήσετε τη σειρά εισαγωγής, θα σας πρότεινα να χρησιμοποιήσετε αυτή την παραλλαγή

// list is some List of Strings
Set s = new LinkedHashSet(list);

Στη συνέχεια, αν χρειαστεί να πάρετε πίσω μια αναφορά List, μπορείτε να χρησιμοποιήσετε ξανά τον κατασκευαστή μετατροπής.

Σχόλια (5)

Αν δεν θέλετε διπλότυπα, χρησιμοποιήστε ένα Set αντί για μια List. Για να μετατρέψετε μια List σε Set μπορείτε να χρησιμοποιήσετε τον ακόλουθο κώδικα:

// list is some List of Strings
Set s = new HashSet(list);

Αν είναι πραγματικά απαραίτητο, μπορείτε να χρησιμοποιήσετε την ίδια κατασκευή για να μετατρέψετε ένα Set πίσω σε List.

Σχόλια (2)