Java學習:Java中的集合——TreeSet

今天我們來分享的就是

TreeSet類

(set的另一個子類)

TreeSet

閒話不多說直接上乾貨

TreeSet 存儲 Integer 類型的元素並遍歷

代碼演示

TreeSet會給集合中的元素排序並保證元素的唯一性~

TreeSet保證元素唯一和自然排序的原理

請看圖:

小編是一個有着5年工作經驗的java程序員,對於java,自己有做資料的整合,一個完整學習java的路線,學習資料和工具,相信這裏有很多學習java的小夥伴,我創立了一個2000人學習扣羣,479121291。每晚都有java的直播課程。無論是初級還是進階的小夥伴小編我都歡迎!

TreeSet的底層是這樣的一個二叉樹(如上圖所示),當我們存儲的第一個元素的時候,會把第一個元素存在“根”的位置,存儲第二個元素的時候,TreeSet 底層會調用 compareTo() 方法:

1)如果 compareTo()的返回結果爲 0 則這兩個元素是一樣的,就不會存儲,

2)如果返回負數,則第二個元素比第一個元素小,把第二個元素存儲在左孩子的位置。

3)如果返回正數,則第二個元素比第一個元素大,把第二個元素存儲在右孩子的位置。

以此類推~

TreeSet存儲自定義對象並遍歷

按照姓名排序

代碼演示

自定義對象要記得實現compareTo()方法呦~不然沒辦法排序的~

TreeSet的比較器排序

字符串在TreeSet中默認是按照字典順序來存儲的~

我們來寫段代碼驗證一下

他是按照abcd的順序來存儲的~假設我們不想這樣,想按照字符串長度來存儲,我們應該怎麼辦呢? 少年比較器瞭解一下~

比較器原理

先來查看一下API在TreeSet的構造方法中有一個比較器的構造方法~

我們先來寫一個比較器

這樣就可以按照我們定義的比較器來給集合進行排序了~

那麼來總結一下TreeSet

TreeSet 用來給排序, 可以指定一個順序, 對象存入之後會按照指定的順序排列

排序的方式有兩種

1)自然順序(Comparable)

TreeSet 類的 add() 方法中會把存入的對象提升爲 Comparable 類型,調用對象的 compareTo() 方法和集合中的對象比較,根據 compareTo() 方法返回的結果進行存儲。

2)比較器順序(Comparator)

創建 TreeSet 的時候可以制定一個 Comparator,如果傳入了 Comparator 的子類對象, 那麼TreeSet就會按照比較器中的順序排序。add() 方法內部會自動調用 Comparator 接口中 compare() 方法排序調用的對象是 compare 方法的第一個參數,集合中的對象是 compare 方法的第二個參數。

兩種方式的區別

TreeSet 構造函數什麼都不傳, 默認按照類中 Comparable 的順序。

TreeSet 如果傳入 Comparator, 優先按照 Comparator。

那麼TreeSet我們就說完了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章