java集合類原理分析

2021-07-31 03:20:31 字數 1310 閱讀 1705

collection

------list

arraylist:是有序的;非執行緒安全;基於陣列實現;相比較linkedlist對於陣列的查詢和更新效率較高;

底層實現:內部有乙個object陣列,預設初始化陣列大小是10,每當陣列容量不夠時候,會動態擴充套件陣列的長度,按照一次原來1.5倍的速度擴增,

呼叫arrays.copyof方法,通過反射建立陣列;在指定位置插入元素時,先為陣列增加乙個空間,然後再插入位置之後所有元素移位;有三種訪問方式:for迴圈,迭代器,for迴圈下標方式

vector:

有序的;執行緒安全;基於陣列實現;效能差於arraylist;相比較linkedlist對於陣列的查詢和更新效率較高;

底層實現:內部有乙個object陣列,預設初始化陣列大小是10,每當陣列容量不夠時候,會動態擴充套件陣列的長度,按照一次原來2倍的速度擴增,

呼叫arrays.copyof方法,通過反射建立陣列;在指定位置插入元素時,先為陣列增加乙個空間,然後再插入位置之後所有元素移位;

在指定位置插入元素時,先為陣列增加乙個空間,然後再插入位置之後所有元素移位;

有四種訪問方式:for迴圈,迭代器,列舉,for迴圈下標方式

linkedlist:

實現了list,deque介面,既是有序的,又實現了佇列介面;查詢和更新較慢,但是插入和刪除比較快;每次新增乙個元素,size加1

內部實現:是基於乙個node的內部類,有item,pre和next三個屬性。

------set

------hashset

不能有重複元素;是雜湊,無序的;存入的物件必須實現hashcode()和equals(),保證儲存進去的物件是不同的;

底層實現:hashmap

------treeset

不能有重複元素,是有序的;

底層實現:二叉樹;通過comparator實現排序

------map

hashmap:初始化長度為16,載入因子為0.75;不是執行緒安全的

底層實現:陣列+鍊錶的方式,有個一entry的靜態內部類,entry裡邊有個next屬性,實現鍊錶,而陣列就是entry;

陣列index=hashcode%table.length

hashtable:

預設初始化長度為11,載入因子為0.75;執行緒安全

底層實現:與hashmap類似。

concurrenthashmap

和hashtable一樣,都是執行緒安全的,只是加鎖的方式不一樣,分段加鎖,預設有16個段,每個段表示乙個hash表,get時候不需要加鎖,

大大提高了效率,put不需要加鎖。

Java 集合類詳解

上述類圖中,實線邊框的是實現類,比如arraylist,linkedlist,hashmap等,折線邊框的是抽象類,比如abstractcollection,abstractlist,abstractmap等,而點線邊框的是介面,比如collection,iterator,list等。發現乙個特點,...

Java 集合類學習

繼承關係圖 1 list 有序 索引 可重複 list裡存放的物件是有序的,同時也是可以重複的,list關注的是索引,擁有一系列和索引相關的方法。arraylist 陣列 快速訪問 arraylist可以理解成乙個可增長的陣列,因此可以通過索引快速訪問。linkedlist 鍊錶 快速插入 刪除 l...

Java集合常用類

集合的兩個頂級介面分別為 單列集合collection 和 雙列集合map 單列集合 collection 和雙列集合 map 特點如下 一 collection 單列集合類的根介面,有兩個重要的子介面,即 list 和 set set 介面特點是元素無序並且不可重複,主要實現類有 hashset ...