集合(容器)

集合有兩個分支,一是Collection? ?另一個是Map

Collection的子類有Set ,? List??

List:
?----arrayList? 底層通過數(shù)組實現(xiàn), 帶索引,但是一旦改動數(shù)據(jù)就會使數(shù)據(jù)重新排序,所以優(yōu)點是查詢快,缺點是增刪慢
-----linkedLIst 底層通過鏈表實現(xiàn),通過下標實現(xiàn)排序,優(yōu)缺點正好與arraylist相反
-----vector 線程安全的集合

(ArrayList 補充) : arraylist 初始長度默認是10 , 每次擴容默認擴原來的1.5倍
(linkedLIst? 補充):? ? ?


? ? ? ? linkedList底層是雙向鏈表,每一個元素都有三部分,頭,中,尾? .? ?頭指向上一個元素,尾部指向下一個元素,頭指向為空的元素,就是第一個元素,尾部指向元素為空的,就是最后一個元素,

? ? ? ? 增刪快的原因: 刪除元素后,只需要改變上一個元素的尾部指向,跟下一個元素的頭部指向,不需要移動鏈表

? ? ? ? 查詢慢的原因: 鏈表要查詢某個位置上的元素,需要通過下標一個個找,效率低下.

Set: hashSet底層實際就是一個HashMap,通過hashmap的key值不能重復的特點實現(xiàn)set的元素唯一性,map的value值存的都是new Object();

? ? ? ? treeSet: treeSet底層就是一個treeMap;

Map


HashMap?HashMap 的優(yōu)點是 :結合了arraylist跟linkedList的優(yōu)點,既查詢快,增刪也快

實現(xiàn)原理 : hashmap是基于哈希表實現(xiàn)的。如上圖, map在調用put的時候,會將key的哈希碼取出,將key進行算法運算后分配到entry[] 數(shù)組中相應的位置, 如:HashMap默認長度為16(當使用量達到75%時,會進行擴容到原來的兩倍),索引值為hashCode%16的方式(效率最低的算法是hashCode/hashCode, 即退化成一個單向鏈表),當確定索引后,會將數(shù)據(jù)以鏈表形式存入數(shù)組,(? ?hash|key |? value |? next? ? ?) , jdk8以后,當鏈表長度大于8,會轉換為紅黑樹,進而增加查詢效率

取數(shù)據(jù)的實現(xiàn)如下圖


HashTable: hashTable 基本與hashMap相似,但是hashTable是線程安全的,效率較低,并且hashTable是不允許key跟value為null的

TreeMap: treeMap是基于紅黑二叉樹實現(xiàn)的,是可排序的map集合,如果是對象需要排序,對象需要實現(xiàn)Comparable接口,并重寫 CompartTo方法實現(xiàn)排序

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容