Özellikle performans konusunda, teknik hususlara dayanarak birçok cevap verilmiştir. Bana göre seçim TreeSetve HashSetönemli.
Ancak tercihin önce kavramsal düşüncelerle yönlendirilmesi gerektiğini söyleyebilirim .
Eğer manipüle etmeniz gereken nesneler için, doğal bir düzen mantıklı değilse, o zaman kullanmayın TreeSet.
Uyguladığı için sıralı bir kümedir SortedSet. Bu compareTo, işlevi döndüren işlevle tutarlı olması gereken işlevi geçersiz kılmanız gerektiği anlamına gelir equals. Örneğin, Öğrenci adında bir sınıfın nesnelerinden oluşan bir kümeniz varsa,TreeSetöğrenciler arasında doğal bir düzen olmadığı için anlamlı olur. Onları ortalama derecelerine göre sipariş edebilirsiniz, tamam, ama bu bir "doğal sipariş" değil. İşlev compareTosadece iki nesne aynı öğrenciyi temsil ettiğinde değil, aynı zamanda iki farklı öğrenci aynı sınıfa sahip olduğunda da 0 değerini döndürür. İkinci durumda, equalsyanlış döndürür (iki farklı öğrenci aynı sınıfa sahip olduğunda ikincisinin doğru olmasına karar vermedikçe, bu equalsişlev yanlış bir anlam söylemek için yanıltıcı bir anlama sahip olacaktır .)
Lütfen equalsve compareToisteğe bağlıdır, ancak şiddetle önerilir. Aksi takdirde arayüz sözleşmesi Setbozulur, bu da kodunuzu diğer insanlara yanlış yönlendirir, bu da muhtemelen beklenmedik davranışlara yol açar.
Bu bağlantı , bu soruya ilişkin iyi bir bilgi kaynağı olabilir.