HashMap中的Entry

胡椒csdn 2015-08-26 05:40:30
一直不清楚HashMap中的Entry<k,v>是个什么东东,最近看了一下源码,将自己的理解总结如下,望各位达人不吝赐教。(此文略去对hashcode生成的细节讨论)
HashMap中定义了一个实现了Map.Entry<k,v>的静态Entry<K,V>类,此类定义了如下(只摘录了最主要的部分):
static class Entry<K,V> implements Map.Entry<K,V> {
final K key;
V value;
Entry<K,V> next;
final int hash;

/**
* Creates new entry.
*/
Entry(int h, K k, V v, Entry<K,V> n) {
value = v;
next = n;
key = k;
hash = h;
}

public final K getKey() {
return key;
}

public final V getValue() {
return value;
}
……略
} 可以看出该类是用来存放键值对的,并且通过next指向下一个实例实现链表结构。
在HashMap中定义了一个Entry类型的数组(Entry[ ] table ),当要put key-value时,先通过key计算hashcode作为该数组的下标,然后将实例化的Entry<>置于此位置。若发生冲突(不同的key对应相同的下标)则通过Entry中的next实现链接。
所以我认为HashMap中的Entry<k,v>类型是以链表的形式存放键值对的。
...全文
809 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lntro 2018-12-22
  • 打赏
  • 举报
回复
引用 2 楼 中华雪碧 的回复:
Map查找的速度,很快,时间复杂度是O(1).,原因就是 1.通过hash 产生index ,初步锁定位置,就是 数组的实现 2.依次判断key,找到目标对象,HashMap用的是链表(Entry<k,v>),也可以是其他的。 P.S Map的一个关键在于散列的质量,尽可能均匀的散列
这里我有个疑问啊,通过hash产生index这句话我没理解,比如我有一个数组 A[0] B[1] C[2] 那么当我put一个B的时候,B经过hash是一串数字,这串数字怎么锁定的B呢?还是说通过hash就可以得到B对应的索引?
老李家的小二 2015-09-07
  • 打赏
  • 举报
回复
http://www.importnew.com/7099.html
sxiaobei 2015-09-07
  • 打赏
  • 举报
回复
内部存储是一个数组挂链表的形式,你可以看调用iterator遍历的时候,是以数组为主线遍历的,如果数据没有挂载链表那么直接进行下一个数组元素的遍历,如果有挂载链表,那么就遍历该链表,遍历完之后再次去遍历下一个数组元素,那个Iterator也是在内部实现的,建议看一下这样好理解了
洛轩丶 2015-09-06
  • 打赏
  • 举报
回复
可以去看看数据结构这块的东西 里面有讲到 hashmap key不能重复是如何比较 的 就是先比较hash值 如果hashcode不同 那么这个key肯定没有 如果hashcode值相同时 在用equals比较 这样比较的快一些 但是为什么比较hashcode的值比较快 这点 我看了一下源代码 不是很了解 这就不说了 只能看 有没有大神能 赐教
中华雪碧 2015-08-26
  • 打赏
  • 举报
回复
Map查找的速度,很快,时间复杂度是O(1).,原因就是 1.通过hash 产生index ,初步锁定位置,就是 数组的实现 2.依次判断key,找到目标对象,HashMap用的是链表(Entry<k,v>),也可以是其他的。 P.S Map的一个关键在于散列的质量,尽可能均匀的散列
zhuangqingch 2015-08-26
  • 打赏
  • 举报
回复
楼主理解得差不多,HashMap本质就是数组+链表结构。其实这块内容相对是比较简单的,楼主如果想对HashMap有更深刻的理解,可以去了解下hash的冲突(或者叫碰撞)和溢出问题以及相关的解决方案及JDK的内部解决方案,当前楼主的学习方式不错,想要对JDK提供API有更深的理解,最好的办法就是看源代码。

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧