1. Java集合體系框架
java.util中包含 Java 最常用的the collections framework。
Java集合類主要由兩個根接口Collection和Map派生出來的。
- Collection 接口派生出了三個子接口List、Set、Queue。
- Map 接口
因此Java集合大致也可分成List、Set、Queue、Map四種接口體系。
2 Collection 接口
Collection 接口派生出了三個子接口List、Set、Queue。
2.1 List 接口
List 接口:有序可重復集合,可直接根據元素的索引來訪問
List接口常用的實現類有:ArrayList、LinkedList、Vector。
2.1.1 List 集合特點
- 集合中的元素允許重復
- 集合中的元素是有順序的,各元素插入的順序就是各元素的順序
- 集合中的元素可以通過索引來訪問或者設置
2.1.2 List 實現類
ArrayList:Java中的實現List接口的類,底層使用數組來存儲元素。但與數組相比,它具有更靈活的大小和動態的增加和刪除元素。允許任何符合規則的元素插入甚至包括null,每一個ArrayList都有一個初始容量(10),該容量代表了數組的大小。ArrayList擅長于隨機訪問,同時ArrayList是非同步的。
Vector:與ArrayList相似,但Vector是同步的,它的操作與ArrayList幾乎一樣。
LinkedList:LinkedList是List接口采用雙向循環鏈表的實現,除了可以根據索引訪問集合元素外,LinkedList還實現了Deque接口,可以當作雙端隊列來使用,也就是說,既可以當作“棧”使用,又可以當作隊列使用。
2.2 Set 接口
Set:無序不可重復集合,只能根據元素本身來訪問
Set接口常用的實現類有:HashSet、LinkedHashSet、TreeSet
2.2.1 Set 實現類
HashSet:hSet底層數據結構采用哈希表實現,元素無序且唯一,線程不安全,效率高,可以存儲null元素,元素的唯一性是靠所存儲元素類型是否重寫hashCode()和equals()方法來保證的,如果沒有重寫這兩個方法,則無法保證元素的唯一性。
LinkedHashSet:底層數據結構采用鏈表和哈希表共同實現,鏈表保證了元素的順序與存儲順序一致,哈希表保證了元素的唯一性。
TreeSet:底層數據結構采用二叉樹來實現,元素唯一且已經排好序,唯一性同樣需要重寫hashCode和equals()方法,二叉樹結構保證了元素的有序性。
2.3 Queue
Queue:隊列集合,支持 FIFO,尾部添加、頭部刪除(先進隊列的元素先出隊列)
2.3.1 Queue 實現類
PriorityQueue:PriorityQueue保存隊列元素的順序并不是按照加入的順序,而是按照隊列元素的大小進行排序的。
PriorityQueue不允許插入null元素。
Deque:Deque接口是Queue接口的子接口,它代表一個雙端隊列,當程序中需要使用“棧”這種數據結構時,推薦使用ArrayDeque。
3 Map 接口
Map 接口:存儲key-value對的集合,可根據元素的key來訪問value
3.1 Map 實現類
HashMap:Map接口基于哈希表的實現,是使用頻率最高的用于鍵值對處理的數據類型。它根據鍵的hashCode值存儲數據,大多數情況下可以直接定位到它的值,特點是訪問速度快,遍歷順序不確定,線程不安全,最多允許一個key為null,允許多個value為null。
可以用 Collections的synchronizedMap方法使HashMap具有線程安全的能力,或者使用ConcurrentHashMap類。
Hashtable:Hashtable和HashMap從存儲結構和實現來講有很多相似之處,不同的是它承自Dictionary類,而且是線程安全的,另外Hashtable不允許key和value為null,并發性不如ConcurrentHashMap。
Hashtable不建議在新代碼中使用,不需要線程安全的場合可以用HashMap替換,需要線程安全的場合可以用ConcurrentHashMap替換。
LinkedHashMap:LinkedHashMap繼承了HashMap,是Map接口的哈希表和鏈接列表實現,它維護著一個雙重鏈接列表,此鏈接列表定義了迭代順序,該迭代順序可以是插入順序或者是訪問順序。
TreeMap:TreeMap實現SortMap接口,能夠把它保存的記錄根據鍵排序,默認是按鍵值的升序排序(自然順序),也可以指定排序的比較器,當用Iterator遍歷TreeMap時,得到的記錄是排過序的。
3.2 Map 實現類總結
原文鏈接
https://blog.csdn.net/m0_67322837/article/details/124322953