更新時間:2020-05-22 16:08:30 來源:動力節點 瀏覽2206次
Java集合框架是Java設計者非常重要的一個設計靈感體現。相對數組,Java提供的集合框架是非常高效且方便的,同時也易于操作。根據我們平時書寫代碼的頻率以及面試時經常被問到的知識點里,都不可或缺的提到集合框架,好多同學其實都學過集合框架,但是用的時候卻發現自己從沒仔細想過,我為什么要用這個集合呢?
1.List類和Set類
List類和Set類是Collection集合接口的子接口。
Set子接口:無序,不允許重復。
List子接口:有序,可以有重復元素。
2.Set和List對比
Set:檢索元素效率低下,刪除和插入效率高,插入和刪除不會引起元素位置改變。
List:和數組類似,List可以動態增長,查找元素效率高,插入刪除元素效率低,因為會引起其他元素位置改變。
3.Set和List具體子類
Set
|————HashSet:以哈希表的形式存放元素,插入刪除速度很快。
|————LinkedHashSet:采用哈希表存儲結構,同時使用鏈表維護次序。
|————TreeSet:采用二叉樹(紅黑樹)的存儲結構。
List
|————ArrayList:動態數組
|————LinkedList:鏈表、隊列、堆棧。
Map接口
Map接口是獨立的一個接口,與Collection接口沒有關系。
特點是:數據是 key-value 映射
具體子類:
|———— HashMap
Key 無序 唯一 (Set)
Value 無序 不唯一 (Collection)
|———— LinkedHashMap
有序的HashMap 速度快
|———— TreeMap
有序 速度沒有hash快
注意:HashSet底層結構其實就是調用HashMap
1.從線程安全方面比較
線程安全就是說多線程訪問同一代碼,不會產生不確定的結果。集合框架之間的區別和比較的一個點,也就是包括是否線程安全,一般情況下,線程安全就必定速度或效率相對就低,這是由設計決定的。
線程安全集合類與非線程安全集合類
LinkedList、ArrayList、HashSet是非線程安全的,Vector是線程安全的;
HashMap是非線程安全的,HashTable是線程安全的;
StringBuilder是非線程安全的,StringBuffer是線程安全的。
2.從適用場景比較
對于查找和刪除較為頻繁,且元素數量較多的應用,Set或Map是更好的選擇;
ArrayList適用于通過為位置來讀取元素的場景;
LinkedList 適用于要頭尾操作或插入指定位置的場景;
Vector 適用于要線程安全的ArrayList的場景;
Stack 適用于線程安全的LIFO場景;
HashSet 適用于對排序沒有要求的非重復元素的存放;
TreeSet 適用于要排序的非重復元素的存放;
HashMap 適用于大部分key-value的存取場景;
TreeMap 適用于需排序存放的key-value場景。
最后附上集合框架比較的詳細圖
集合框架不要死記硬背,一定要理解他們的數據結構及底層實現原理,實際工作中,我們常用的也就那么幾個,只是面試過程中,會經常被問到它們之間的區別和差異!
以上就是動力節點java培訓機構的小編針對“Java編程技術分享,Java常用集合類”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習