特徵拓展
linkedlist和arraylist對比簡介
底層實現
transient
int size =0;
//長度
transient node
first;
//頭節點
transient node
last;
//尾節點
private
static
class
node
}
核心方法分析public
boolean
add(e e)
void
linklast
(e e)
public
boolean
addall
(int index, collection<
?extends
e> c)
else
for(object o : a)
if(succ == null)
else
size += numnew;
modcount++
;return
true
;}
node
node
(int index)
else
}
根據索引進行查詢時會先判斷索引在前半段還是後半段,然後進行遍歷查詢,這樣保證了只要遍歷最多一半的節點就能找到它,但是查詢效率依然遠不如arraylist的索引訪問。 特徵
拓展在jdk1.7之前linkedlist使用的是迴圈鍊錶,1.7及以後使用的是非迴圈鍊錶,差別在於:
1.6
private
transient entry
header =
newentry
(null, null, null)
;private
transient
int size =
0;
1.6以後
transient
int size =0;
transient node
first;
transient node
last;
1.6及其之前的版本提供的兩個基本屬性為size和乙個header node物件,header的前驅儲存尾節點的引用,後繼則是第二個元素,形成了乙個環形結構。
在1.6以後使用的是兩個指標指向頭尾。優點是,**邏輯更加清晰易懂,節省了乙個物件的記憶體空間。
底層實現的區別:arraylist使用的是object[ ]陣列實現儲存,linkedlist底層實現是雙鏈表
arraylist隨機讀取速度更快,但是插入慢,linkedlist順序讀取和插入刪除操作快,隨機讀取慢。原因:arraylist底層由陣列儲存,每個元素有對應的索引,所以隨機讀取快,linkedlist底層又雙向鍊錶實現,隨機讀取時最多需要便利半個列表來搜尋。進行插入或者刪除操作時,arraylist操作的時間複雜度又元素的位置決定,進行插入刪除操作時,後續的所有元素都需要向後或者向前移動(又陣列複製實現),而linkedlist只需要找到對應的位置改變前驅和後繼的引用指標即可完成修改。
對記憶體空間的占用,arraylist存在一定的空間浪費,因為他動態擴容會在列表尾部預留一定的空間,在越長時預留的也越多,linkedlist的空間占用在於每乙個節點除了儲存本節點資料以外還需要儲存前驅和後繼的資料。
Java基礎 集合框架《二》
map與collection在集合框架是並列存在的。map儲存的是鍵對值。一對一對往裡存,而且要保證鍵的唯一性。map儲存元素使用的是put方法,collection使用的是add方法。map集合沒有直接取出元素的方法,而是先轉換成set集合,再通過迭代器獲取元素。map hashtable 底層是...
Java基礎 集合
1 集合的型別和各自的特性 collection 單列集合 list 有儲存順序 可重複 arraylist 陣列實現,查詢快,增刪慢,由於是陣列實現,在增和刪的時候會牽扯到陣列增容,以及拷貝元素 所以慢。陣列是可以直接按索引查詢,所以查詢時較快 linkedlist 鍊錶實現,增刪快,查詢慢由於鍊...
java基礎 集合
1 物件的儲存 陣列 基本資料型別 引用資料型別 集合 引用資料型別 陣列儲存資料的弊端 長度一旦初始化以後,就不可變 真正給陣列元素賦值的個數沒有現成的方法可用。2 集合框架 collection介面 list介面 儲存有序的,可以重複的元素,相當於 動態 陣列 新增進list集合中的元素 或物件...