Hash底層源碼分析__步步紮進Java

來源:互聯網
上載者:User


    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異常

 * 但這種行為也不能保證同步不出錯

 */  


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.