HashMap作为常用的一种数据结构,阅读源码去了解其底层的实现是十分有必要的。在这里也分享自己阅读源码遇到的困难以及自己的思考。
HashMap的源码介绍已经有许许多多的博客,这里只记录了一些我看源码过程中的疑问,一些基础知识不再讲解。
一:Hash值的来源和使用
1 public V put(K key, V value) { 2 return putVal(hash(key), key, value, false, true); 3 } 4 5 static final int hash(Object key) { 6 int h; 7 // <<< 无符号右移 8 return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); 9 }