❶ java怎麼修改Set里的值
通過remove和add方法,set集合中的對象屬性為private final
Set介面
集合里的多個對象沒有明顯順序。Set集合和Collection基本一樣,沒有
提供額外方法,只是和Collection行為不同
Set集合不允許包含相同的元素,如果add的是兩個相同元素會返回false
Set不實用==運算符,根據equals方法
HashSet類
HashSet類是Set介面的典型實現,大多數時候使用Set集合都是用這個類實現
HashSet按Hash演算法來存儲集合中的元素
HashSet特點:
1.不能保證元素的排列順序,順序可能變化
2.HashSet不是同步的,多個線程同時訪問一個Set集合,必須用代碼
保證同步
3.集合元素值可以是null
當向HashSet集合中存入一個元素,HashSet會調用該對象的HashCode()
得到對象的hashCode,根據HashCode來決定對象在HashSet中的位置
如果兩個元素equal方法比較返回true但是hashCode()方法返回值不同,
HashSet會把兩個元素存儲在不同位置
HashSet判斷兩個元素相同需要equal和hashCode都相同
因此重寫類的equals方法和hashCode()方法要保證兩個對象通過equals
返回true時hashCode也相等
Hash演算法保證通過一個對象快速找到另一個對象。可以很快的執行,當需要
查找集合中的某個元素時,hash演算法可以直接根據該元素的值找到該元素
從而讓程序快速找到元素。
在數組中通過數組元素索引尋找元素,HashSet通過hashcode索引
重寫hashCode()方法的基本步驟
當兩個對象通過equals方法返回true時,兩個對象的hashCode相等
對象中用作equals比較標準的屬性,應該用來計算hashCode
向HashSet中添加可變對象時,如果修改HashSet集合中對象,有可能導致
該對象與集合中其他對象相等,從而導致HashSet無法正確訪問對象
HashSet有一個子類 LinkedHashSet,LinkedHashSet集合也是根據HashCode來決定
元素的存儲位置,同時使用鏈表維護元素次序,這樣是的元素看起來是以
插入順序保存,便利集合時會按插入順序來訪問。
Linked需要維護元素的插入順序,性能略低於HashSet,但在迭代時性能更好
TreeSet是SortedSet介面的唯一實現
TreeSet可以確保元素處於排序狀態。提供了幾個額外方法:
1.Comparator
comparator():返回當前Set使用的Comparator,或者null,表示
自然的方式排序
2.Object first():返回集合中的第一個元素
3.Object last():返回集合中最後一個元素
4.Object lower(Object
e):返回集合中位於指定元素之前的元素
5.Object higher(Object
e):返回集合中位於制定元素之後的元素
6.SortedSet
subSet(fromElement,toElement):返回set的子集,范圍從from到to
7.SortedSet headSet(toElement)返回set子集,小於toElement
8.SortedSet
tailSet(fromElement)返回set子集,由大於等於fromElement元素組成
TreeSet是根據元素值來進行排序而不是根據插入順序
TreeSet採用紅黑樹的數據結構對元素排序 :支持自然排序(默認)和定製排序
自然排序:
TreeSet會調用集合元素的compareTo方法來比較元素之間的大小關系,
然後將集合元素按升序排列。
Java提供了一個Comparable介面,該介面定義了一個compareTo(Object obj)方法
該方法返回一個整數值,實現該介面的類必須實現該方法,實現了該介面的類的對象
可以比較大小。obj1.compareTo(obj2),如果方法返回0,表明兩個對象相等。如果
返回正整數,表明obj1大於obj2;如果返回負整數,表明obj1小於obj2
如果要將對象添加如TreeSet該對象必須實現Comparable介面
當想TreeSet中添加對象時,會先將要添加的對象與TreeSet中的對象用compareTo比較
如果找不到compareTo則引發ClassCastException異常
因為只有同一個類型才能比較大小 所以TreeSet中添加的應該是同一個類型的對象
TreeSet和HashSet集合中的對象如果是可變對象,對象屬性改變時,會導致集合處理
對象復雜化,易出錯。所以應該盡量在集合中添加不可變對象
不可變對象是
1.屬性為private final
2.含有帶參數構造器,為對象初始化
3.屬性有get方法沒有set方法
定製排序:
TreeSet的自然排序是根據集合元素大小,TreeSet將它們以升序排列。使用定製
排序,如降序,使用Comparator介面的幫助。介面中包含一個int compare(T o1,T o2)
用於比較o1和o2的大小:重寫該方法可以改變排序規則