TreeSet其實是使用紅黑樹實現,和哈希沒有關係,排序時不調用hashCode,HashSet會調用hashCode取得對象保存的位置,當同調用默認toString時會使用hashCode生成String
TreeSet排序時不主動調用equals(存疑),但是會主動調用compareTo
當對象不能比大小時,只能確定其是否相等,會先調用hashCode,hashCode相等時會調用equals
TreeSet中與比較大小相關的屬性被改變時,不會對其重新排序,目前較好的做法是移除原來的對象,改變後重新插入
面向對象的過程中不能用力過猛,有一些實現可以留給其他模塊
還有個最奇怪的,Set、List這些容器中保存另一個容器時,比較是否相等時好像是比較最內部的對象,而不是內層的容器對象就像這裏hh1不包含hashSet2但是打印的時true,但如果把註釋加上,打印變爲false(有時間一定研究一下,這個很重要)
P p1 = new P(),p2 = new P(), p3 = new P();
hashSet1.add(p1);
hashSet2.add(p1);
//hashSet1.add(p2);
hh1.add(hashSet1);
hh2.add(hashSet2);
System.out.println(hh1.contains(hashSet2));