回顧:
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 底層的資料結構是紅黑數 如何保證元素的排序?自然排序 比較排序 如...