Collection子介面 Set介面

2021-10-22 16:01:27 字數 1952 閱讀 5593

無序性不等於隨機性。儲存的資料在底層陣列中並非照陣列索引的順序新增,而是根據資料的雜湊值決定的。

@test

public

void

test()

}

保證新增的元素照equals()判斷時,不能返回true,即相同的元素只能新增乙個。

@test

public

void

test()

}

我們向hashset中新增元素a,首先呼叫元素a所在類的hashcode()方法,計算元素a的雜湊值,此雜湊值接著通過某種演算法計算出在hashset底層陣列中的存放位置(即索引位置,判斷陣列此位置上是否已經元素):

hashset底層:陣列+鍊錶的結構。

hashcode()方法計算雜湊值

public

static

inthashcode

(object a)

之所以自動生成的係數是31,是因為選擇係數的時候要選擇盡量大的係數。因為如果計算出來的hash位址越大,所謂的「衝突」就越少,查詢起來效率也會提高(減少衝突)。並且31只占用5bits,相乘造成資料溢位的概率較小。

31可以 由i*31== (i<<5)-1來表示,現在很多虛擬機器裡面都有做相關優化(提高演算法效率)。

31是乙個素數,素數作用就是如果我用乙個數字來乘以這個素數,那麼最終出來的結果只能被素數本身和被乘數還有1來整除!(減少衝突)。

person類繼承comparable介面,重寫compareto()方法,按照名字從小到大排序。自然排序中,比較兩個物件是否相同的標準為compareto()返回0.不再是equals().

@override

public

intcompareto

(object o)

else

}

@test

public

void

test1()

}

定製排序中,比較兩個物件是否相同的標準為compare()返回0.不再是equals().

@test

public

void

test2()

else}}

; treeset set =

newtreeset

(comparator)

; set.

add(

newperson

("bb",22

)); set.

add(

newperson

("aa",23

)); set.

add(

newperson

("cc",22

)); iterator iterator = set.

iterator()

;while

(iterator.

hasnext()

)}

Collection子介面 List介面

3.常用實現類 4.原始碼分析 難點 4.2 linkedlist的原始碼分析 4.3 vector的原始碼分析 5.儲存的元素的要求 1.儲存的資料特點 儲存序的 可重複的資料。2.常用方法 記住 增 add object obj 刪 remove int index remove object ...

Collection子介面 Set介面

1.儲存的資料特點 無序的 不可重複的元素 具體的以hashset為例說明 無序性 不等於隨機性。儲存的資料在底層陣列中並非照陣列索引的順序新增,而是根據資料的雜湊值決定的。不可重複性 保證新增的元素照equals 判斷時,不能返回true.即 相同的元素只能新增乙個。2.元素新增過程 以hashs...

collection的子介面set

set介面 特點 無序,不可重複!允許null元素1.hashset 內部封裝hashmap 非執行緒安全a.首先判斷hashcode 使用物件的hashcode來判斷物件加入的位置,同時也會與其他已經加入的物件的hashcode進行 比較,如果沒有相等的hashcode,hashset就會假設物件...