1. 程式人生 > >Java學習:Java中的集合——TreeSet

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我們就說完了