導航:首頁 > 編程語言 > javaset打亂

javaset打亂

發布時間:2024-10-14 23:08:44

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的大小:重寫該方法可以改變排序規則

閱讀全文

與javaset打亂相關的資料

熱點內容
慧編程安裝完黑屏怎麼回事 瀏覽:246
mysql安裝後的配置文件 瀏覽:261
oppo如何創建文件夾 瀏覽:30
編程演算法邏輯怎麼理解 瀏覽:577
4m和10m網路有什麼區別 瀏覽:139
怎麼把圖片放在文件裏手機 瀏覽:799
刪除注冊文件的軟體 瀏覽:461
javascript滑動事件教程 瀏覽:706
網站點擊高有什麼收入 瀏覽:964
公眾號一鍵連wifi密碼嗎 瀏覽:628
ios從微信啟動應用程序 瀏覽:501
mc9編程刀庫怎麼用 瀏覽:446
python提取文件欄位 瀏覽:180
服裝供應鏈如何賣貨的網站有哪些 瀏覽:583
繪本電子軟體app有哪些 瀏覽:90
軟體文件缺失一直系統彈窗提醒 瀏覽:548
歡樂鬥地主騰訊版本下載安裝到手機 瀏覽:130
app下載數據哪裡查 瀏覽:971
英版蘋果5升級系統可以嗎 瀏覽:140
公眾號後台有什麼數據 瀏覽:455

友情鏈接