Java集合框架是Java設(shè)計者非常重要的一個設(shè)計靈感體現(xiàn)。相對數(shù)組,Java提供的集合框架是非常高效且方便的,同時也易于操作。根據(jù)我們平時書寫代碼的頻率以及面試時經(jīng)常被問到的知識點里,都不可或缺的提到集合框架,好多同學(xué)其實都學(xué)過集合框架,但是用的時候卻發(fā)現(xiàn)自己從沒仔細(xì)想過,我為什么要用這個集合呢?
常用集合類比較
1.List類和Set類
List類和Set類是Collection集合接口的子接口。
Set子接口:無序,不允許重復(fù)。
List子接口:有序,可以有重復(fù)元素。
2.Set和List對比
Set:檢索元素效率低下,刪除和插入效率高,插入和刪除不會引起元素位置改變。
List:和數(shù)組類似,List可以動態(tài)增長,查找元素效率高,插入刪除元素效率低,因為會引起其他元素位置改變。
3.Set和List具體子類
Set
|————HashSet:以哈希表的形式存放元素,插入刪除速度很快。
|————linkedHashSet:采用哈希表存儲結(jié)構(gòu),同時使用鏈表維護(hù)次序。
|————TreeSet:采用二叉樹(紅黑樹)的存儲結(jié)構(gòu)。
List
|————ArrayList:動態(tài)數(shù)組
|————linkedList:鏈表、隊列、堆棧。
Map接口
Map接口是獨立的一個接口,與Collection接口沒有關(guān)系。
特點是:數(shù)據(jù)是 key-value 映射
具體子類:
|———— HashMap
Key 無序 唯一 (Set)
Value 無序 不唯一 (Collection)
|———— linkedHashMap
有序的HashMap 速度快
|———— TreeMap
有序 速度沒有hash快
注意:HashSet底層結(jié)構(gòu)其實就是調(diào)用HashMap
如何應(yīng)對面試中關(guān)于集合框架的問題呢?
1.從線程安全方面比較
線程安全就是說多線程訪問同一代碼,不會產(chǎn)生不確定的結(jié)果。集合框架之間的區(qū)別和比較的一個點,也就是包括是否線程安全,一般情況下,線程安全就必定速度或效率相對就低,這是由設(shè)計決定的。
線程安全集合類與非線程安全集合類
linkedList、ArrayList、HashSet是非線程安全的,Vector是線程安全的;
HashMap是非線程安全的,HashTable是線程安全的;
StringBuilder是非線程安全的,StringBuffer是線程安全的。
2.從適用場景比較
對于查找和刪除較為頻繁,且元素數(shù)量較多的應(yīng)用,Set或Map是更好的選擇;
ArrayList適用于通過為位置來讀取元素的場景;
linkedList 適用于要頭尾操作或插入指定位置的場景;
Vector 適用于要線程安全的ArrayList的場景;
Stack 適用于線程安全的LIFO場景;
HashSet 適用于對排序沒有要求的非重復(fù)元素的存放;
TreeSet 適用于要排序的非重復(fù)元素的存放;
HashMap 適用于大部分key-value的存取場景;
TreeMap 適用于需排序存放的key-value場景。
最后附上集合框架比較的詳細(xì)圖
集合框架不要死記硬背,一定要理解他們的數(shù)據(jù)結(jié)構(gòu)及底層實現(xiàn)原理,實際工作中,我們常用的也就那么幾個,只是面試過程中,會經(jīng)常被問到它們之間的區(qū)別和差異!
以上就是長沙一度軟件培訓(xùn)java培訓(xùn)機(jī)構(gòu)的小編針對“Java編程技術(shù)分享,Java常用集合類”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。