集合知識點梳理

2021-09-28 16:17:47 字數 1174 閱讀 2191

父介面 collection

子介面 list set

實現類.

arraylist linkedlist vector hashset,treeset,linkedhashset

vector底層是陣列.

執行緒安全. 速度慢.

arraylist底層是陣列.

執行緒不安全,查詢比較速度,增刪比較慢.

linkedlist底層是鍊錶

執行緒不安全,增刪較快,查詢較慢.

不允許重複.訪問無序.

hashset本質是hashmap中的key

treeset基於compartor -> compare方法

linkedhashset訪問有序.

jdk1.7 -> 底層是陣列 + 鍊錶.

jdk1.8 -> 底層是陣列 + 鍊錶 + 紅黑樹.

jdk1.8引入紅黑樹的原因:

當出現hash衝突|碰撞時,value會掛在陣列後面的鍊錶上.當鍊表長度過長時,會導致查詢效率比較低. 在鍊錶長度大於等於8時,會從鍊錶轉換為紅黑樹,當鍊表長度小於等於6時,從紅黑樹轉為鍊錶.

jdk1.8為了實現紅黑樹,將entry包裝為node.可以旋轉變色.

hashmap是如何避免hash衝突出現的.

(h = key.hashcode()) ^ (h >>> 16)

為什麼?

hashtable -> 效率太低.

所有寫方法直接變成synchronized方法.

concurrenthashmap ->

jdk1.7

陣列 + 鍊錶.

segment -> reentrantlock

初始化了長度為16的segment -> 將hashmap根據hash分散到不同的segment中.

jdk1.8

陣列 + 鍊錶 + 紅黑樹.

cas + synchronized.

當沒有hash衝突時,採用cas樂觀鎖的方式,不會鎖住hashmap,嘗試新增.

當出現hash衝突時,會使用synchronized鎖住鍊錶.

Java集合知識點梳理

由collection介面派生的兩個介面是list和set,都可以使用迭代器來遍歷,它們都實現了iterator介面 一.list 實現list介面的常用類有linkedlist,arraylist,vector和stack,list允許有相同的元素。arraylist 基於陣列方式實現,無容量的限...

Linux知識點梳理

使用者名稱 主機名 root hostname 使用者名稱 主機名稱 符號含義 當前使用者屬於root使用者 當前使用者屬於普通使用者 注意 對系統進行配置管理時,如要root使用者 檢視主機名稱 hostname設定主機名稱 hostname hadoop senior.com注意 該方式設定,當...

spring 知識點梳理

1.spring預設所有管理的bean都是單例模式 懶載入,所有的bean都是交給spring容器中的map管理,生命週期與spring相同,如果使用多例模式,bean則是交給記憶體管理,生命週期與spring無關 2.ssm分層 控制層 服務層 資料層 對應的註解分別為 controller se...