Bagaimana cara menghapus elemen yang berulang-ulang dari ArrayList?
Saya memiliki sebuah ArrayList<String>
, dan saya ingin menghapus berulang string dari itu. Bagaimana saya bisa melakukan ini?
471
38
Jika anda don't ingin duplikat dalam
Koleksi
, anda harus mempertimbangkan mengapa anda're menggunakanKoleksi
yang memungkinkan duplikat. Cara termudah untuk menghapus elemen yang berulang-ulang adalah untuk menambahkan isi keSet
(yang tidak akan memungkinkan duplikat) dan kemudian tambahkanSet
kembali keArrayList
:Tentu saja, ini menghancurkan urutan unsur-unsur dalam
ArrayList
.Meskipun mengkonversi
ArrayList
keHashSet
efektif menghilangkan duplikasi, jika anda perlu untuk melestarikan penyisipan order, I'd agak menyarankan anda untuk menggunakan varian iniKemudian, jika anda perlu untuk mendapatkan kembali sebuah
Daftar
referensi, anda dapat menggunakan lagi konversi konstruktor.Di Jawa 8:
Harap dicatat bahwa kode hash-sama dengan kontrak untuk daftar anggota harus dihormati untuk penyaringan untuk bekerja dengan baik.
Misalkan kita memiliki daftar
String
seperti:Kemudian kita bisa menghapus duplikat elemen dalam beberapa cara.
Sebelum ke Jawa 8
Catatan: Jika kita ingin mempertahankan penyisipan order maka kita perlu menggunakan
LinkedHashSet
di tempatHashSet
Menggunakan Jambu BijiMenggunakan Java 8
Catatan: jika kita ingin mengumpulkan hasilnya di a daftar spesifik pelaksanaan misal
LinkedList
kemudian kita dapat memodifikasi contoh di atas sebagai:Kita dapat menggunakan
parallelStream
juga dalam kode di atas tetapi tidak dapat memberikan diharapkan kinerja manfaat. Check this pertanyaan untuk lebih lanjut.Jika anda don't ingin duplikat, gunakan Set bukan
Daftar
. Untuk mengkonversiDaftar
untukMengatur
anda dapat menggunakan kode berikut:Jika benar-benar diperlukan, anda dapat menggunakan konstruksi yang sama untuk mengkonversi
Set
kembali keDaftar
.Anda juga dapat melakukannya dengan cara ini, dan melestarikan order:
Berikut ini's cara yang doesn't mempengaruhi anda klik disini untuk memesan:
l1 adalah daftar asli, dan l2 adalah daftar tanpa diulang item (Pastikan YourClass telah sama dengan metode yang sesuai dengan apa yang anda inginkan untuk berdiri untuk kesetaraan)
Jawa 8 sungai memberikan cara yang sangat sederhana untuk menghapus duplikat elemen dari daftar. Menggunakan metode yang berbeda. Jika kita memiliki daftar kota-kota dan kita ingin menghapus duplikat dari daftar itu dapat dilakukan dalam satu jalur -
Bagaimana untuk menghapus duplikat unsur-unsur dari arraylist
Ada juga
ImmutableSet
dari Jambu sebagai pilihan (di sini adalah dokumentasi):Hal ini dimungkinkan untuk menghapus duplikat dari arraylist tanpa menggunakan HashSet atau satu lagi arraylist.
Coba kode ini..
Output adalah
ini dapat memecahkan masalah:
Mungkin sedikit berlebihan, tapi aku menikmati jenis masalah terisolasi. :)
Kode ini menggunakan Seperangkat sementara (untuk keunikan check) tapi menghilangkan unsur-unsur yang secara langsung di dalam daftar asli. Karena penghapusan elemen dalam ArrayList dapat menginduksi sejumlah besar array menyalin, menghapus(int)-metode dihindari.
Sementara kita're pada itu, di sini's versi untuk LinkedList (banyak lebih baik!):
Gunakan penanda antarmuka untuk hadir sebuah solusi terpadu untuk Daftar:
EDIT: saya kira generik-hal yang doesn't benar-benar menambah nilai apapun di sini.. Oh well. :)
Jika anda're bersedia untuk menggunakan pihak ketiga perpustakaan, anda dapat menggunakan metode yang berbeda()` di Eclipse Koleksi (sebelumnya GS Koleksi).
Keuntungan menggunakan
yang berbeda()
bukan mengkonversi satu Set dan kemudian kembali ke Daftar yangberbeda()
mempertahankan urutan asli Daftar, penahan kejadian pertama dari masing-masing elemen. It's dilaksanakan dengan menggunakan satu Set dan Daftar.Jika anda tidak dapat mengkonversi asli anda Daftar menjadi Gerhana Koleksi jenis, anda dapat menggunakan ListAdapter untuk mendapatkan API.
Catatan: saya terima untuk Eclipse Koleksi.
Ini tiga baris kode dapat menghapus duplikasi elemen dari ArrayList atau koleksi.
Kode:
Catatan: Pasti, akan ada memori overhead.
Ketika anda mengisi ArrayList, menggunakan kondisi untuk masing-masing elemen. Misalnya:
Jika anda ingin menyimpan Pesanan anda maka itu adalah yang terbaik untuk menggunakan LinkedHashSet. Karena jika anda ingin lulus Daftar ini untuk Menyisipkan Query dengan Iterasi itu, pesanan akan dipertahankan.
Coba ini
Konversi ini akan sangat membantu ketika anda ingin kembali Daftar tapi tidak satu Set.
Jika anda menggunakan jenis model Daftar< T>/ArrayList< T> . Harapan,'s membantu anda.
Berikut adalah kode tanpa menggunakan struktur data lain seperti set atau hashmap