Bagaimana cara membuat daftar objek unik / berbeda (tidak ada duplikat) di Java?
Sekarang saya menggunakan HashMap<String, Integer>
untuk melakukan ini karena kuncinya ditimpa dan karenanya pada akhirnya kita bisa mendapatkan HashMap.getKeySet()
yang unik. Tapi saya yakin harus ada cara yang lebih baik untuk melakukan ini karena bagian nilai terbuang percuma di sini.
sumber
Saya ingin mengklarifikasi beberapa hal di sini untuk poster asli yang telah disinggung orang lain tetapi belum dinyatakan secara eksplisit. Saat Anda mengatakan bahwa Anda menginginkan daftar unik, itulah definisi dari Kumpulan Berurutan. Beberapa perbedaan utama lainnya antara Antarmuka Set dan Antarmuka Daftar adalah bahwa Daftar memungkinkan Anda menentukan indeks penyisipan. Jadi, pertanyaannya adalah apakah Anda benar-benar membutuhkan Antarmuka Daftar (yaitu untuk kompatibilitas dengan pustaka pihak ketiga, dll.), Atau dapatkah Anda mendesain ulang perangkat lunak Anda untuk menggunakan antarmuka Set? Anda juga harus mempertimbangkan apa yang Anda lakukan dengan antarmuka. Apakah penting untuk menemukan elemen berdasarkan indeksnya? Berapa banyak elemen yang Anda harapkan di set Anda? Jika Anda ingin memiliki banyak elemen, apakah pemesanan itu penting?
Jika Anda benar-benar membutuhkan Daftar yang hanya memiliki batasan unik, ada kelas Apache Common Utils org.apache.commons.collections.list.SetUniqueList yang akan memberi Anda antarmuka Daftar dan batasan unik. Pikiran Anda, ini merusak antarmuka Daftar. Namun, Anda akan mendapatkan kinerja yang lebih baik dari ini jika Anda perlu mencari ke dalam daftar berdasarkan indeks. Jika Anda dapat menggunakan antarmuka Set, dan Anda memiliki kumpulan data yang lebih kecil, LinkedHashSet mungkin merupakan cara yang baik untuk digunakan. Itu hanya tergantung pada desain dan tujuan perangkat lunak Anda.
Sekali lagi, ada kelebihan dan kekurangan masing-masing koleksi. Beberapa sisipan cepat tetapi pembacaan lambat, beberapa memiliki pembacaan cepat tetapi sisipan lambat, dll. Masuk akal untuk meluangkan cukup banyak waktu dengan dokumentasi koleksi untuk mempelajari detail yang lebih baik dari setiap kelas dan antarmuka.
sumber
Gunakan
new HashSet<String>
Contoh:sumber
Anda bisa menggunakan a
HashSet<String>
untuk memelihara koleksi objek unik. JikaInteger
nilai di peta Anda penting, Anda dapat menggunakancontainsKey
metode maps untuk menguji apakah kunci Anda sudah ada di peta.sumber
HashSet<String>
(atau)Set
implementasi apa pun dapat melakukan pekerjaan itu untuk Anda.Set
jangan izinkan duplikat.Berikut adalah javadoc untuk HashSet.
sumber
Saya tidak tahu seberapa efisien ini, Namun berhasil untuk saya dalam konteks yang sederhana.
sumber
Anda mungkin ingin menggunakan salah satu kelas pelaksana
java.util.Set<E>
Antarmuka misalnyajava.util.HashSet<String>
kelas koleksi.sumber