答案:
執行緒安全
arraylist
:底層是陣列實現,執行緒不安全,查詢和修改⾮常快,但是增加和刪除慢
linkedlist:
底層是雙向鍊錶,執行緒不安全,查詢和修改速度慢,但是增加和刪除速度快
vector:
底層是陣列實現,執行緒安全的,操作的時候使⽤
synchronized
進⾏加鎖
使⽤場景
vector
已經很少⽤了
增加和刪除場景多則⽤
linkedlist
查詢和修改多則⽤
arraylist
⽅式⼀:⾃⼰寫個包裝類,根據業務⼀般是
add/update/remove
加鎖
⽅式⼆:
collections.synchronizedlist(new arraylist<>());
使⽤synchronized
加鎖
⽅式三:
copyonwritearraylist<>()
使⽤reentrantlock加鎖
如果回答到上⾯的點則繼續問,沒回到到則問,了解
copyonwritearraylist嗎?
和 collections.synchronizedlist實現執行緒安全有什麼區別
, 使⽤場景是怎樣的?
copyonwritearraylist
:執⾏修改操作時,會拷⻉⼀份新的陣列進⾏操作(
add、
set、
remove等)
,代價⼗分昂貴,在執⾏完修改後將原來集合指向新的集合來完成修改操作,源
碼⾥⾯⽤
reentrantlock
可重⼊鎖來保證不會有多個執行緒同時拷⻉⼀份陣列
場景:讀⾼效能,適⽤讀操作遠遠⼤於寫操作的場景中使⽤
(讀的時候是不需要加鎖的,
直接獲取,刪除和增加是需要加鎖的
, 讀多寫少)
collections.synchronizedlist
:執行緒安全的原因是因為它⼏乎在每個⽅法中都使⽤了
synchronized同步*
鎖 場景:寫操作效能⽐
copyonwritearraylist
好,讀操作效能並不如
copyonwritearraylist
答案:設計思想:讀寫分離
+最終⼀致
缺點:記憶體佔⽤問題
,寫時複製機制
,記憶體⾥會同時駐紮兩個物件的記憶體,舊的物件和新寫⼊的物件,
如果物件⼤則容易發⽣
yong gc
和full gc
List 面試題List的子類特點
list 面試題list的子類特點 arraylist 底層資料結構是陣列,查詢快,增刪慢。執行緒不安全,效率高。vector 底層資料結構是陣列,查詢快,增刪慢。執行緒安全,效率低。linkedlist 底層資料結構是鍊錶,查詢慢,增刪快。執行緒不安全,效率高。list有三個兒子,我們到底使用誰呢...
List 面試題List的子類特點
list 面試題list的子類特點 arraylist 底層資料結構是陣列,查詢快,增刪慢。執行緒不安全,效率高。vector 底層資料結構是陣列,查詢快,增刪慢。執行緒安全,效率低。linkedlist 底層資料結構是鍊錶,查詢慢,增刪快。執行緒不安全,效率高。list有三個兒子,我們到底使用誰呢...
C C 面試題專業篇
1.介紹stl,詳細說明 stl如何實現 vector 2.分析visual c 程式出錯的原因 3.繼承和多型有何區別 4.指標和引用有何區別,穿引用比傳指標安全,為什麼 5.引數傳遞的方式與多型引數傳遞的實現 6.怎樣應用設計模式的理念 7.介紹一下對設計模式的理解 8.c 和 c定義結構的區別...