Έχω μια ArrayList<String>
, και θέλω να αφαιρέσω επαναλαμβανόμενες συμβολοσειρές από αυτήν. Πώς μπορώ να το κάνω αυτό;
Αν δεν θέλετε διπλότυπα σε μια Συλλογή
, θα πρέπει να σκεφτείτε γιατί χρησιμοποιείτε μια Συλλογή
που επιτρέπει διπλότυπα. Ο ευκολότερος τρόπος για να αφαιρέσετε επαναλαμβανόμενα στοιχεία είναι να προσθέσετε τα περιεχόμενα σε ένα Set
(το οποίο δεν θα επιτρέπει διπλά) και στη συνέχεια να προσθέσετε το Set
πίσω στο ArrayList
:
Set<String> set = new HashSet<>(yourList);
yourList.clear();
yourList.addAll(set);
Φυσικά, αυτό καταστρέφει τη διάταξη των στοιχείων της ArrayList
.
Αν και η μετατροπή της ArrayList
σε HashSet
αφαιρεί αποτελεσματικά τα αντίγραφα, αν πρέπει να διατηρήσετε τη σειρά εισαγωγής, θα σας πρότεινα να χρησιμοποιήσετε αυτή την παραλλαγή
// list is some List of Strings
Set<String> s = new LinkedHashSet<>(list);
Στη συνέχεια, αν χρειαστεί να πάρετε πίσω μια αναφορά List
, μπορείτε να χρησιμοποιήσετε ξανά τον κατασκευαστή μετατροπής.
Αν δεν θέλετε διπλότυπα, χρησιμοποιήστε ένα Set αντί για μια List
. Για να μετατρέψετε μια List
σε Set
μπορείτε να χρησιμοποιήσετε τον ακόλουθο κώδικα:
// list is some List of Strings
Set<String> s = new HashSet<String>(list);
Αν είναι πραγματικά απαραίτητο, μπορείτε να χρησιμοποιήσετε την ίδια κατασκευή για να μετατρέψετε ένα Set
πίσω σε List
.