集合,Set實現類筆記

2021-07-02 15:37:07 字數 2053 閱讀 9560

回顧:

list體系

棧:佇列:

陣列:鍊錶:

list體系的三個子類

arraylist -- 資料結構 陣列

vector -- 資料結構 陣列

特有功能

linkedlist -- 資料結構 鍊錶

特有功能

first

last

面試題: 模擬棧結構

泛型:明確資料型別的工作放在建立物件 或者 呼叫方法的時候

型別轉換異常

三個應用:泛型介面   泛型類   泛型方法

arrays工具類

tostring()

sort()

binarysearch()

1、 set

特點:元素無序 , 唯一

注意這個順序,指的是元素存入和取出的順序

set是乙個不包含重複元素的 collection

hashset它不保證 set 的迭代順序;特別是它不保證該順序恆久不變。

hashset元素無序的解釋:

要理解這個問題應該考慮到set是個介面。介面的規則很單純,不會做過多的保證。

set的規則重點就是「元素不重複的集合」,而對順序不做保證。

實現該介面的類既可以提供有序的實現,也可以提供無序的實現。 

hashset在儲存資料的時候顯然還是得按一定順序放入其中(通過hash演算法),但順序不是使用者可控制的,對使用者來說就是「無序」。

hashset add原始碼分析

hashset 裡面封裝了 hashmap

呼叫hashset的 add()  實際走 hashmap的put()

put()方法裡面 首先去算了物件的hash值 -- 呼叫物件的hashcode()

(e.hash == hash && ((k = e.key) == key||key.equals(k)))

如果hash值不等,直接斷定元素不一樣,新增

如果相等,走後面的判斷 e.key == key  ||  key.equals(k)  依賴於equals() 方法。

如果equals返回的也是true,那麼元素重複了。

結論:hashset保證元素唯一 依賴於元素的 hashcode()  和 equals() 方法

hashset 重複的元素,新增失敗。

treeset 重複的元素,也是新增失敗的。

treeset 裡面對元素進行了自然排序。

treeset 對元素進行排序:

1.讓元素具有比較性 -- 實現comparable 介面

根據compareto()方法的返回值,來判斷元素的順序,並保證元素的唯一。

正數:元素往後放

負數:元素往前放

0:表示元素重複,不新增。

2.讓集合具備比較性 , 使用集合的帶參構造

treeset(comparator comparator) 

自定義比較器去實現comparator介面。

構造乙個新的空 treeset,它根據指定比較器進行排序。

需求:我想按學生的年齡排序:

this.age - s.age

需求1:按照物件的年齡排序,從小到大排序

public int compareto(student s)

}需求2:按照物件的姓名長度,從小到大排序,怎麼做?

treeset 底層資料結構是二叉樹

滿二叉樹  完全二叉樹

儲存資料的時候: 第乙個元素先放到跟節點。其他的元素進來 與根節點比較

如果小,放左邊

如果大,放右邊。

如果一樣,替換。

取出:從根節點開始拿,按照左中右的順序。

匿名內部類回顧:

格式:new 介面或抽象類名 ()

collections

工具類:

排序: sort(list list)

二分查詢:binarysearch(list list)

反轉 : reverse(list list)

隨機置換: shuffle(list list)

最值:max / min (collection c)

學習筆記分享 Set集合實現類 HashSet

set是無序的,用於儲存不重複的物件集合。在set集合中儲存的物件中,不存在equals比較為true的情況。1 hashset和treeset是set集合的兩個常見的實現類,分別用hash表和排序二叉樹的方式實現了set集合。hashset是使用雜湊演算法實現set的。2 set集合沒有get i...

Set集合筆記

set集合的元素是無序的,沒有索引,不能出現重複元素,所以它的子類也是一樣。1.set集合有兩個最常見的子類hashset和treeset hashset集合 底層是雜湊表。物件進行比較時,底層用的是hashcode和equals方法 先用hashcode方法比較 比較雜湊值 如果一樣在用equal...

Set集合筆記

1.hashset 底層資料結構是雜湊表 如何來保證元素的唯一呢?倆個方法hashcode 和 equals 2.linkedhashset 底層的資料結構是鍊錶和雜湊表 鍊錶保證元素有序 有雜湊表保證元素的唯一 3.treeset 底層的資料結構是紅黑數 如何保證元素的排序?自然排序 比較排序 如...