Banyak jawaban telah diberikan, berdasarkan pertimbangan teknis, terutama seputar kinerja. Menurut saya, pilihan antara TreeSetdan HashSethal - 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 aTreeSetakan masuk akal, karena tidak ada pemesanan alami antara siswa. Anda dapat memesannya dengan nilai rata-rata, oke, tapi ini bukan "pemesanan alami". Fungsi compareToakan 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, equalsakan menghasilkan false (kecuali jika Anda memutuskan untuk membuat yang kedua kembali benar ketika dua siswa berbeda memiliki nilai yang sama, yang akan membuat equalsfungsi memiliki makna yang menyesatkan, tidak untuk mengatakan makna yang salah.)
Harap perhatikan konsistensi antara equalsdan compareTobersifat opsional, tetapi sangat disarankan. Kalau tidak, kontrak antarmuka Setterputus, 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.