Collection概念:是一個集合接口,提供了對集合對象進行基本操做的通用接口方法。html
有如下結構:數組
|--List安全
| |--LinkedList工具
| |--ArrayList線程
| |--Vectorhtm
| |--stack對象
|--Setblog
Collections: 包含各類有關集合操做的靜態多態方法,且該類沒法實例化,至關於一個工具類。接口
HashMap的特色:線程不安全,容許傳入 null值,不能保存映射的順序。由數組(默認長度爲16)+鏈表組成,jdk1.8後,若其鏈表長度大於8,就會轉變成紅黑樹。資源
ps:HashMap線程不安全,是由於多個對象同時對同一HashMap進行操做時,會致使髒讀、數據丟失的發生。
詳細參考:https://www.cnblogs.com/aspirant/p/8908399.html
HashTable:能夠理解爲線程安全的HashMap,爲何是線程安全的,由於它的put、remove、get方法都被synchronized修飾,使其同步,天然是線程安全的了。
ConcurrentHashMap:是線程安全且高效的HashMap,由Segment數組結構和HashEntry數組結構組成,Segment是一種可重入鎖ReentrantLock,在ConcurrentHashMap裏扮演鎖的角色,HashEntry則用於存儲鍵值對數據。
一個ConcurrentHashMap裏包含一個Segment數組,Segment的結構和HashMap相似,是一種數組和鏈表結構, 一個Segment裏包含一個HashEntry數組,每一個HashEntry是一個鏈表結構的元素, 每一個Segment守護着一個HashEntry數組裏的元素,當對HashEntry數組的數據進行修改時,必須首先得到它對應的Segment鎖。
爲何安全:採用了分段鎖技術,給Segment數組的每一個元素加鎖。
分段鎖技術:大體含義就是,將資源分紅多個段存儲,再給這些資源分段分別配一把鎖,這樣線程訪問其中一個資源也不影響其餘線程訪問其餘分段的資源,大大提升了效率。