Java集合類框架
Python實戰(zhàn)社群
Java實戰(zhàn)社群
長按識別下方二維碼,按需求添加
掃碼關(guān)注添加客服
進(jìn)Python社群▲
掃碼關(guān)注添加客服
進(jìn)Java社群▲
作者丨Henry扶蘇
來源丨Henry扶蘇
簡介
????????在平時的開發(fā)里我們經(jīng)常用到集合框架,比如ArrayList、HashMap、HashTable、HashSet,但是你有沒有否關(guān)注過在某種特殊的場景下是否還有其它功能一樣但效率更高、容錯率更高的框架呢。其實我們常用的集合框架完全能幫我們解決問題,但作為一個不安分的程序員,在閑下來之后總是想試著分析分析其它的。說干就干,首先我們先要把我們的一些集合框架列出來再分別介紹,一圖勝千言:?

????????唉!作圖的天分實在是太差,湊合看吧。上面是自己通過官方文檔和其它渠道總結(jié)的,目測應(yīng)該是算比較全面的了,如果有遺漏后邊會繼續(xù)補充。不整理不知道,原來有這么多數(shù)據(jù)結(jié)構(gòu)框架和衍生版本,不知道是自己的知識儲備太差還是平時關(guān)注比較少,雖然這里邊有一些已經(jīng)不推薦使用了,但我還是想全面了解一下,畢竟不會有壞處。
?本來想總結(jié)幾篇常用的數(shù)據(jù)結(jié)構(gòu)框架,但看在這么多不認(rèn)識的,姑且多總結(jié)一些吧。這片就對這些進(jìn)行一些總體的總結(jié),后邊單開章節(jié)來分別介紹,首先把他們的大致用法和解釋標(biāo)注一下,總結(jié)的不好,如果發(fā)現(xiàn)有錯誤我會及時修改。我在寫博客的時候有個習(xí)慣,非常喜歡用圖來表示,總感覺文字太多了會有些難以看見去,并不是說文字描述不好,可能還是自己的文字功底太差導(dǎo)致的吧!廢話不多說,下面進(jìn)行簡單總結(jié):
????????關(guān)于基礎(chǔ)的Set、Map、List、Queue這些數(shù)據(jù)結(jié)構(gòu)這里不做過多的描述,大部分程序員對這些都是又一些概念的,依稀主要對以實現(xiàn)類在單線程和多線程的使用上進(jìn)行區(qū)分。
| 單線程 | 并發(fā) | |
|---|---|---|
| List | ArrayList :Java 動態(tài)數(shù)組LinkedList:線性數(shù)據(jù)結(jié)構(gòu) | CopyOnWriteArrayList:是一個線程安全的ArrayList,做遍歷用Vector:支持線程同步的動態(tài)數(shù)組 |
| QueueDeque | ArrayDeque:雙端隊列實現(xiàn)Stack:標(biāo)準(zhǔn)的后進(jìn)先出的棧PriorityQueue:通過二叉小頂堆實現(xiàn) | ArrayBlockingQueue:數(shù)組實現(xiàn)的線程安全的有界的阻塞隊列 ConcurrentLinkedDeque / ConcurrentLinkedQueue:非阻塞,無鎖,無界 ,線程安全雙端操作的隊列DelayQueue:在指定時間才能獲取隊列元素LinkedBlockingDeque / LinkedBlockingQueue:可選容量的有界雙向鏈表隊列,可設(shè)置是否帶邊界 LinkedTransferQueue:可將元素 SynchronousQueue:使用 |
| Map | HashMap:散列表,存放Key-Value的數(shù)據(jù)結(jié)構(gòu)EnumMap:Key 可以是Enum類型的對象 Hashtable:基于Dictionary類實現(xiàn)的比較陳舊 IdentityHashMap:嚴(yán)格判斷key值是否相等 LinkedHashMap:保持插入順序 TreeMap:對插入的鍵進(jìn)行排序 WeakHashMap:適用于做一些緩存操作 | ConcurrentHashMap:它是HashMap的一個線程安全的、支持高效并發(fā)的版本 ConcurrentSkipListMap:一個并發(fā)安全, 基于skip list 實現(xiàn)有序存儲的Map |
| Set | HashSet:存儲元素不可重復(fù),底層基于 HashMapEnumSet:專門為 Eunm設(shè)計的集合 類BitSet:Bit或密集的整數(shù)SetLinkedHashSet:保持Key插入順序TreeSet:有序集合 | ConcurrentSkipListSet:排序并發(fā) SetCopyOnWriteArraySet:做遍歷用 |
????????上邊對這些集合類做了一些總結(jié),幾乎每個應(yīng)用場景都有對應(yīng)的功能,現(xiàn)在回想起來以前代碼寫的確實性能欠佳,如果替換成以上的性能估計會提升不少,所以后面嘗試對自己的應(yīng)用做一些數(shù)據(jù)方面的性能處理。這一篇寫到這里,后邊會把一些集合類拿出來分析,預(yù)計能提升不少的見識。剛開始寫博客確實語言組織方面差點,不過相信堅持一段時間之后會有提升的。?


近期精彩內(nèi)容推薦:??


