Banyak jawaban telah diberikan, berdasarkan pertimbangan teknis, terutama seputar kinerja. Menurut saya, pilihan antara TreeSet
dan HashSet
hal - hal.
Tapi saya lebih suka mengatakan pilihan harus didorong oleh pertimbangan konseptual terlebih dahulu.
Jika, untuk objek yang perlu Anda manipulasi, pemesanan alami tidak masuk akal, maka jangan gunakan TreeSet
.
Ini adalah set yang diurutkan, karena mengimplementasikan SortedSet
. Jadi itu berarti Anda perlu mengganti fungsi compareTo
, yang harus konsisten dengan fungsi pengembalian apa equals
. Sebagai contoh jika Anda memiliki satu set objek dari kelas yang disebut Siswa, maka saya tidak berpikir aTreeSet
akan masuk akal, karena tidak ada pemesanan alami antara siswa. Anda dapat memesannya dengan nilai rata-rata, oke, tapi ini bukan "pemesanan alami". Fungsi compareTo
akan mengembalikan 0 tidak hanya ketika dua objek mewakili siswa yang sama, tetapi juga ketika dua siswa yang berbeda memiliki nilai yang sama. Untuk kasus kedua, equals
akan menghasilkan false (kecuali jika Anda memutuskan untuk membuat yang kedua kembali benar ketika dua siswa berbeda memiliki nilai yang sama, yang akan membuat equals
fungsi memiliki makna yang menyesatkan, tidak untuk mengatakan makna yang salah.)
Harap perhatikan konsistensi antara equals
dan compareTo
bersifat opsional, tetapi sangat disarankan. Kalau tidak, kontrak antarmuka Set
terputus, membuat kode Anda menyesatkan orang lain, sehingga juga mungkin mengarah pada perilaku tak terduga.
Tautan ini mungkin merupakan sumber informasi yang baik mengenai pertanyaan ini.