Özellikle performans konusunda, teknik hususlara dayanarak birçok cevap verilmiştir. Bana göre seçim TreeSet
ve 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 compareTo
sadece 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, equals
yanlış döndürür (iki farklı öğrenci aynı sınıfa sahip olduğunda ikincisinin doğru olmasına karar vermedikçe, bu equals
işlev yanlış bir anlam söylemek için yanıltıcı bir anlama sahip olacaktır .)
Lütfen equals
ve compareTo
isteğe bağlıdır, ancak şiddetle önerilir. Aksi takdirde arayüz sözleşmesi Set
bozulur, 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.