1. 程式人生 > >Java Collection類總結

Java Collection類總結

  • HashMap
  • HashTable
  • ConcurrentHashMap
  • 併發包

HashMap

HashMap預設的負載因子大小為0.75,也就是說,當一個map填滿了75%的空間的時候,和其它集合類(如ArrayList等)一樣,將會建立原來HashMap大小的兩倍的陣列,來重新調整map的大小,並將原來的物件放入新的陣列中。
對於HashMap,是通過陣列實現的資料結構,陣列中的元素是一個Entry元素(在JDK1.8中改成了Node),每一個Entry中包含一個key值,包含一個value值,以及一個next指標。
對於put操作,會對key值進行hash操作獲取其hashcode值,並利用hashcode對陣列長度取模,得到在陣列中的儲存下標
對於get操作,通過對key值計算其hash值,並利用hash值得到下標,判斷key值是否與陣列中的值相等,通過(key.equal
s()),如果相等返回values,如果不相等,則遍歷連結串列。

HashTable與HashMap的區別

  1. HashTable是執行緒安全的,對於HashMap如果是多執行緒的環境下,必須自己增加同步處理 如 Map map=Collections.synchronizedMap(new HashMap())
  2. hashMap允許key和value值等於null,而hashtable 的key和value都不允許等於null

ConcurrentHashMap

ConcurrentHashMap是執行緒安全的HashMap,但是與HashTable不同的是,HashTable實現執行緒安全的方法是對每個方法都設定為synchronized,而對於ConcurrentHashMap而言是使用分段鎖的方法,把Map分成了N個Segment,呼叫put,get的時候根據key.hashcode,確定將資料放入到哪個segment中。

併發包

volatile