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...