List 元素是有序的、可重復(fù)
ArrayList、Vector默認(rèn)初始容量為10
Vector:線程安全,但速度慢
底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組結(jié)構(gòu)
加載因子為1:即當(dāng) 元素個(gè)數(shù) 超過 容量長(zhǎng)度 時(shí),進(jìn)行擴(kuò)容
擴(kuò)容增量:原容量的 1倍
如 Vector的容量為10,一次擴(kuò)容后是容量為20
ArrayList:線程不安全,查詢速度快
底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組結(jié)構(gòu)
擴(kuò)容增量:原容量的 0.5倍+1
如 ArrayList的容量為10,一次擴(kuò)容后是容量為16
Set(集) 元素?zé)o序的、不可重復(fù)。
HashSet:線程不安全,存取速度快
底層實(shí)現(xiàn)是一個(gè)HashMap(保存數(shù)據(jù)),實(shí)現(xiàn)Set接口
默認(rèn)初始容量為16(為何是16,見下方對(duì)HashMap的描述)
加載因子為0.75:即當(dāng) 元素個(gè)數(shù) 超過 容量長(zhǎng)度的0.75倍 時(shí),進(jìn)行擴(kuò)容
擴(kuò)容增量:原容量的 1 倍
如 HashSet的容量為16,一次擴(kuò)容后是容量為32
Map是一個(gè)雙列集合
HashMap:默認(rèn)初始容量為16
(為何是16:16是2^4,可以提高查詢效率,另外,32=16<<1?????? -->至于詳細(xì)的原因可另行分析,或分析源代碼)
加載因子為0.75:即當(dāng) 元素個(gè)數(shù) 超過 容量長(zhǎng)度的0.75倍 時(shí),進(jìn)行擴(kuò)容
擴(kuò)容增量:原容量的 1 倍
如 HashSet的容量為16,一次擴(kuò)容后是容量為32
TreeMap和TreeSet原理
TreeMap底層是用紅黑樹來存儲(chǔ),每個(gè)Entry對(duì)應(yīng)樹的一個(gè)節(jié)點(diǎn),TreeMap元素默認(rèn)從小到大排序。V put(Key k, Value v)實(shí)質(zhì)是二叉排序樹的插入算法
Set和Map的關(guān)系
Set代表無(wú)序,不能重復(fù)的集合;Map代表Key-Value組成的集合,是一種關(guān)聯(lián)數(shù)組。Map的Key要求是不能重復(fù),沒有順序。把Map的所有Key組合起來就是Set。Set keySet();
Vector和ArrayList區(qū)別
Vector提供synchronized修飾方法,是線程安全版本的ArrayList