发帖JAVA HashMap如何处理冲突的?

1.Java1.6源代码的HashMap,get数据或者put数据的时候,会产生冲突吗?2.如果产生了冲突,是如何解决的?使用的开放地址法?链地址法?或者其他?为了方便说... 1.Java 1.6源代码的HashMap,get数据或者put数据的时候,会产生冲突吗?2.如果产生了冲突,是如何解决的?使用的开放地址法?链地址法?或者其他? 为了方便说明,我假定现在已经有一个Map myMap = new HashMap(),一个有6条数据,其中第2个位置上面有3个数据,如图:

附上HashMap的源码: public V put(K key, V value) { if (key == null) return putForNullKey(value); int hash = hash(key.hashCode()); int i = indexFor(hash, table.length); for (Entry<K,V> e = table[i]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { V oldValue = e.value; e.value = value; e.recordAccess(this); return oldValue; } } modCount++; addEntry(hash, key, value, i); return null; }开始问问题了:1.现在如果我想添加一个元素Key1-Value1,计算出来的hashCode是2,那现在这个元素放到哪里呢?放到元素B的下面?HashMap的源码里面是怎么实现这个的呢?2.addEntry(hash, key, value, i);是什么意思呢?什么时候会用到呢? 下面是get方法: public V get(Object key) { if (key == null) return getForNullKey(); int hash = hash(key.hashCode()); for (Entry<K,V> e = table[indexFor(hash, table.length)]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || key.equals(k))) return e.value; } return null; } 3.如果myMap.get(2),我现在想要的是B元素,HashMap里面是怎么处理的呢?e.next是循环整个map还是只循环key=2的这个链表呢? 请高手耐心解答。。。不胜感激。。。 如果有描述不清楚的,请指教
现在我没有财富分,请原谅啊
展开
 我来答
NoGrief
2014-04-23 · TA获得超过253个赞
知道小有建树答主
回答量:304
采纳率:100%
帮助的人:220万
展开全部
http://zhangshixi.iteye.com/blog/672697
看这篇文章,说的很详细。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式