Java常用集合的預設容量以及擴容機制

2021-09-23 17:08:41 字數 698 閱讀 4382

vector是執行緒安全版的arraylist內部實現都是用陣列實現的。vector通過在方法前用synchronized修飾實現了執行緒同步功能 

stack繼承自vector。新增了同步的push(e e),pop(),peek()方法,預設容量和擴容機制同vector 

copyonwritearraylist是執行緒同步的陣列集合。copyonwritearraylist使用場景主要是多執行緒環境下,查詢、遍歷操作明顯多於增加、刪除操作。 

linkedlist是用雙鏈表實現的。對容量沒有要求,也不需要擴容

arrayblockingqueue是基於陣列實現的執行緒安全的有界佇列。它的容量是使用者傳遞進來的。(內部使用reentrantlock實現執行緒同步)

concurrentlinkedqueue是基於單鏈表實現的執行緒安全的無界佇列。(內部使用cas實現執行緒同步是樂觀鎖)

非執行緒安全的無界佇列。

linkedblockingqueue是基於單鏈表實現的執行緒安全的無界佇列。(內部使用takelock和putlock讀寫分離鎖實現)

hashmap是基於陣列和鍊錶/紅黑樹實現的。hashmap的容量必須是2的冪次方(原因是(n-1)&hash是取模操作,n必須是2的冪次方) 

// todo

繼承自hashmap擴容機制同hashmap

treemap由紅黑樹實現,容量方面沒有限制

同hashmap

Java集合型別的預設容量以及擴容機制

arraylist vector vector是執行緒安全版的arraylist內部實現都是用陣列實現的。vector通過在方法前用synchronized修飾實現了執行緒同步功能 vector預設容量是10 vector最大容量integer.max value 8 vector擴容機制,如果使用...

集合預設容量大小

這裡要討論這些常用的預設初始容量和擴容的原因是 當底層實現涉及到擴容時,容器或重新分配一段更大的連續記憶體 如果是離散分配則不需要重新分配,離散分配都是插入新元素時動態分配記憶體 要將容器原來的資料全部複製到新的記憶體上,這無疑使效率大大降低。載入因子的係數小於等於1,意指 即當 元素個數 超過 容...

常用集合的預設初始容量和擴容的原因

常用集合的預設初始容量和擴容的原因 當底層實現涉及到擴容時,容器或重新分配一段更大的連續記憶體 如果是離散分配則不需要重新分配,離散分配都是插入新元素時動態分配記憶體 要將容器原來的資料全部複製到新的記憶體上,這無疑使效率大大降低。載入因子的係數小於等於1,意指 即當 元素個數 超過 容量長度 載入...