HashMap源碼學習

來源:互聯網
上載者:User

    關於HashMap源碼解析,參考http://www.iteye.com/topic/539465,和http://grunt1223.iteye.com/blog/544497,以及http://www.ibm.com/developerworks/cn/java/j-lo-hash/?open&cm_mmc=6505-_-n-_-vrm_newsletter-_-10104_142587&cmibm_em=dm:0:10631101#ibm-pcon,比較好的是前2個

    總體來說,是一個數組下面掛的鏈表,採用鏈式結構解決衝突,精妙之處有2個:

1、

  static int indexFor(int paramInt1, int paramInt2)  {    return paramInt1 & paramInt2 - 1;  }

如同上面連結所講,平均分配hash到數組上的位置
2、

靜態內部類

《effective java》22條所講,優先使用靜態內部類,使用Entry內部類來儲存元素,對外隱藏所有實現細節

  static class Entry<K, V>    implements Map.Entry<K, V>  {    final K key;    V value;    Entry<K, V> next;    final int hash;    Entry(int paramInt, K paramK, V paramV, Entry<K, V> paramEntry)    {      this.value = paramV;      this.next = paramEntry;      this.key = paramK;      this.hash = paramInt;    }    public final K getKey();    public final V getValue();    public final V setValue(V paramV);    public final boolean equals(Object paramObject);    public final int hashCode();    public final String toString()    void recordAccess(HashMap<K, V> paramHashMap)    {    }    void recordRemoval(HashMap<K, V> paramHashMap)    {    }  }

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.