java基礎學習筆記——集合

集合可以動態的把多個的引用加入其中,並且可以動態的擴容縮容。

java 集合類圖

在這裏插入圖片描述
UML類圖基礎知識:
實現:虛線+空心三角形
繼承:實線+空心三角形
虛線框:接口
大間距的虛線框:抽象類

各個類簡介

ArrayList

基於數組實現,無容量限制。在插入元素時可能要擴容,在刪除元素時不會減小數組的容量,但是提供了trimToSize()方法,用於縮減多餘的容量。
非線程安全。

LinkedList

基於雙向鏈表機制實現。插入刪除複雜度低,查詢複雜度高。
非線程安全

Vector

使用synchronized實現的線程安全的ArrayList。除了擴容方式和線程安全外,其餘和ArrayList完全相同。

Stack

Stack繼承自Vector,提供了push,pop,peek3個主要方法。
線程安全

HashSet

基於HashMap實現,無容量限制。各種方法都是通過調用hashMap中提供的方法來實現的。
不支持get(int)的方式獲取指定位置的元素,既然本質上就是一個數組,爲什麼不提供獲取指定位置元素的方法呢?個人理解是因爲HashSet不保證有序,獲取指定位置的元素是沒有意義的。
但是如果有些場景你非要獲取指定位置的元素,可以考慮這個方法:

List<String> list3 = new ArrayList<String>(set1);

先轉換成list,再使用list的get(int)方法獲取。
非線程安全。

LinkedHashSet

繼承自HashSet,同時使用一個雙向鏈表維護插入順序信息,能夠保證輸出的順序和輸入的順序相同。在插入和刪除元素時,需要同步處理鏈表信息,所以比HashSet稍慢。一般來說,HashSet的遍歷效率可能更高一些,但是當數組容量遠大於元素個數時,LinkedHashSet遍歷效率比HashSet高。
非線程安全。

TreeSet

基於TreeMap實現,支持排序。
非線程安全

HashMap

採用數組方式存儲key,value構成的entry對象,無容量限制。
對key使用hash算法,尋找對象存儲到數組的位置,對於hash衝突採用鏈表方式來解決。
在插入元素時可能會擴大數組的容量,需要重新計算hash,並複製到新的數組。
非線程安全。

LinkedHashMap

繼承自HashMap,同樣使用雙向鏈表來維護順序信息,可以保證輸出的順序和插入的順序一致。

TreeMap

基於紅黑樹實現,可以對元素進行排序。

參考:

https://blog.csdn.net/liulin_good/article/details/6213815
https://blog.csdn.net/gaoxin12345679/article/details/19339111
Java LinkedHashMap工作原理及實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章