Hsah:散列將一個任意長度通過某種(函數函數演算法)轉換成一個固定值,通過hash出來的值,通過只定位到map,key-value 基本原理。
/**
* Hashtable是基於Map介面的實現。這個版本的實現提供了所有map操作的實現並且允許null值和null鍵
* 除了允許空值(null)和不支援同步,HashMap和hashtable沒有什麼區別
* HashMap不保證有序,尤其是不保證順序隨時間不變
* 該實現提供常數時間的get、put操作,假設hash函數使元素均勻分布在bucket中。
*
*一個HashMap執行個體有兩個參數會影響效能:初始容量(initialcapacity)和裝載因子(load factor)
*capacity是hashtable的桶數目,初始容量僅僅只是建立時的容量
*裝載因子是衡量雜湊表自動成長前裝滿的程度
*當雜湊表中索引值對的數目超出容量與裝載因子之積,雜湊表就會重新雜湊(rehashed)(即,內部資料結構會重建)為之前容量的兩倍
*
*通常,預設的裝載因子0.75可以在時間和空間之間有很好的權衡,想避免重新hash的時間開銷,可以設定比較大的初始容量
*太多關鍵字的hashCode()相同也會導致效能下降,HashMap實現使用關鍵字之間的比較順序來平衡
*
*要特別注意HashMap實現不支援同步。如果有多個線程同步訪問一個HashMap,並且一個以上的線程會修改HashMap結構,則需要外部同步;(結構修改是指添加或移除索引值對,僅僅修改value值不是結構修改操作)
*如果沒有這樣的對象,map需要由Collections.synchronizedMap()方法封裝 ,而且最好在Map建立時完成,以防意外的非同步訪問
* 非同步訪問map:<pre>
* Mapm = Collections.synchronizedMap(new HashMap(...));</pre>
*
*HashMap類所有集合視圖返回的迭代器都是“fail-fast”:迭代器建立之後修改map結構,除了使用迭代器自己的remove方法,其他都會拋出ConcurrentModificationException異常
* 但這種行為也不能保證同步不出錯
*/