集合原始碼分析(二)LinkedList集合

2021-08-28 13:06:38 字數 1542 閱讀 9665

1、鍊錶在記憶體中有什麼特點?

鍊錶在記憶體中不是乙個連續的空間。靠前乙個記錄後乙個的位址值,後乙個記錄前乙個的位址值。

2、鍊錶為什麼查詢慢,增刪快?

查詢:先要判斷你要查的這個元素,是靠頭近還是靠尾近。如果是靠頭近,那麼從第乙個開始遍歷;如果靠尾近,那麼從最後乙個開始遍歷。

例如,多個人手拉手,每個人使用自己的右手拉住下個人的左手,依次類推,這樣多個人就連在一起了。

b:查詢速度慢:想查詢某個元素,需要通過連線的節點,依次往後查詢指定的元素。

鍊錶結構,因此增刪快,查詢相對於arraylist較慢。

linkedlist內部有乙個內部類node表示節點。linkedlist實際儲存的元素就是乙個乙個的節點。

內部類構造方法:

node(nodeprev, e element, nodenext)
linkedlist 類中有兩個成員 nodefirst; nodelast;

表示記錄了開頭節點和末尾節點。每一次新增,不管是新增頭還是新增尾還是在中間新增。

都是通過前乙個記錄後乙個的位址值,後乙個記錄前乙個的位址值來實現的。

void add(int index, e element) :將元素新增到index索引位置上

e get(int index) :根據index索引獲取元素

e remove(int index) :根據index索引刪除元素,並將刪除的元素返回

remove(object obj);刪除元素。返回是否刪除成功

e set(int index, e element):將index索引位置的的元素設定為element

void addfirst(e e) :向鍊錶的頭部新增元素

void addlast(e e):向鍊錶的尾部新增元素

e getfirst():獲取鏈頭的元素,不刪除元素

e getlast():獲取鏈尾的元素,不刪除元素

e removefirst():返回鏈頭的元素並刪除鏈頭的元素

e removelast():返回鏈尾的元素並刪除鏈尾的元素

//如何用arraylist實現linkedlist效果呢?

addfirst        利用al.add(0, "q");

addlast            利用al.add("q");

getfirst        利用al.get(0)

getlast            利用al.get(al.size() - 1)

removefirst        利用al.remove(0)

removelast        利用al.remove(al.size()-1)   

以上方法中get,remove(object obj) e remove(int index),實現原理類似,解析:

nodenode(int index)  else 

}

原始碼分析集合Hashmap

public v put k key,v value final v putval int hash,k key,v value,boolean onlyifabsent,boolean evict 如果鍊錶中有相同的key直接跳出迴圈 if e.hash hash k e.key key key ...

Map集合 原始碼分析

map的實現類的結構 map 雙列資料,儲存key value對的資料 hashmap 作為map的主要實現類 執行緒不安全的,效率高 可以儲存null和key的value hashmap的底層 陣列 鍊錶 jdk7之前 陣列 鍊錶 紅黑樹 jdk8 linkedhashmap 保證在遍歷map元素...

集合原始碼分析(四)HashSet集合

無序 無索引 不可以重複。a 存入集合的順序和取出集合的順序不一致 b 沒有索引 c 存入集合的元素不能重複 使用hashset集合注意點 重寫hashcode和equals方法。呼叫順序 規則 新新增到hashset集合的元素都會與集合中已有的元素一一比較。首先比較雜湊值 每個元素都會呼叫hash...