TreeSet知識點總結

2021-08-19 13:19:33 字數 1853 閱讀 9361

set集合一大特點是唯一性。

set集合是如何保證元素的唯一性的?

答:set集合保證元素唯一性依賴兩個方法:hashcode()和equals()。

步驟

先看hashcode()值是否相同

相同:繼續走equals()方法

返回true: 說明元素重複,就不新增

返回false:說明元素不重複,就新增到集合

不同:就直接把元素新增到集合

treeset集合兩大特點:唯一和排序

treeset如何保證元素唯一的?如何實現元素排序的?

答:treeset是基於treemap實現的,treemap集合的底層資料結構是紅黑樹(一種自平衡的二叉查詢樹),這就保證了元素的存入和獲取都是按照一定順序進行的。

元素是如何儲存進去的呢?

第乙個元素儲存的時候,直接作為根節點儲存

從第二個元素開始,每個元素從根節點開始比較

大     就作為右孩子

小     就作為左孩子

相等     就不搭理它

這就有乙個問題,在儲存元素的時候,如何判斷是大?是小?是相等?

答:treese有兩種排序方式:自然排序和比較器排序。至於使用哪種排序方式,由構造方法決定。

自然排序:

要求建立treeset時,使用空參構造,要排序的物件所屬的類必須實現comparable介面,重寫compareto()方法,compareto()方法,返回乙個int型別的值,返回正數代表大,往右放;返回負數,代表小,往左放;返回0,代表相等,不搭理。

基本資料型別包裝類、字串等類都實現了comparable介面,重寫了compareto()方法。

string類中compareto()方法的原始碼解析:

1、首先獲取到兩個字串中長度較小的那個,定義為minlength。

2、將兩個字串轉成字元陣列

3、根據minlength,遍歷兩個字元陣列中的各個字元,一對一進行比較。如果相等,比較下一對字元;如果不相等,返回兩個字元相減後的結果

4、如果在minlength範圍內,字元均相等,那麼返回兩個字串長度相減後的結果

正數:大

負數:小

0  :相等

比較器排序:

要求建立treeset時,使用有參構造,引數為比較器comparator(介面)的實現類,要重寫compare()方法,compare()方法,返回乙個int型別的值,返回正數代表大,往右放;返回負數,代表小,往左放;返回0,代表相等,不搭理。

元素是如何取出來的呢?

中序遍歷取元素。

為什麼重寫了equals()方法,就必須重寫hashcode()方法呢?

答:equals()方法和hashcode()方法都是定義在object類中的方法,在未被重寫時,equals()方法利用==來比較兩個物件的記憶體位址是否相同,呼叫hashcode()方法返回的是該物件的記憶體位址。

如果equals()方法返回true,那麼兩個物件的hashcode()方法返回值必須一樣。

假設兩個物件,重寫了equals()方法,它們相等的條件是內容相等就返回true。如果不重寫hashcode()方法,其返回的依然是兩個物件的記憶體位址值,必然不相等。這就出現了equals()相等,hashcode()不相等的情況,違背了hashcode的規則。

知識點總結

1,迴圈中的中斷 continue 跳出此次迴圈,繼續for迴圈 break 跳出當前for迴圈 return 跳出當前方法 2,字串的操作 componentseparatedbystring stringbyreplacingoccurencesofstring withstring iskin...

知識點總結

oncreate onstrat onresume onpause onstop onrestart ondestroy standard 啟動activity都會產生乙個新的activity 預設模式 singletop 啟動activity允許多個,但不允許重疊 singletask 只允許有乙...

知識點總結

function go go 呼叫 go為變數名 setinterval go,1000 1000ms clearinterval 關閉定時器 function abc a,b 2,3 5undefined 未定義 null 空 nan 非數值 string 字串 var a 123 數字型別 va...