博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HashMap简析
阅读量:6476 次
发布时间:2019-06-23

本文共 617 字,大约阅读时间需要 2 分钟。

hot3.png

1、存储结构

        HashMap存储结构如下图:

        上边这个图画的有点小问题,其实table实际存放的只是Entry引用的列表而已,并不是一个个Entry对象,类似C/C++里的指针列表,后边链表里边的才是一个个Entry对象实体。

2、知识要点

1)table(Entry[])的长度是2的幂次:

        主要为了index计算效率,由index = hash(key) & (table.length-1) 代替index = key.hash() % table.length

        (可能有其它的作用,暂时没有想到或看到其它的文档有说明)

2)为什么Java对象在修改equals()方法实现后,对应也需要修改hashCode()方法:

        HashMap插入流程:

        a. 通过key.hashCode()来定位key对应Entry所在的链表;

        b. 通过equals()遍历链表中指定key对应的Entry;

        c. Entry为空则插入新的key-value(Entry<keyType, valueType>);

        如果对象equals()比较相同,但是因为key.hashCode()不同导致定位到不同的Entry链表,这时再通过equals()遍历链表查找不到业务上相同的key的Entry,这时HashMap中就会插入业务上应该相等的两个key。

转载于:https://my.oschina.net/u/656588/blog/665308

你可能感兴趣的文章
python学习===计算字符串中子串出现的次数。
查看>>
最小生成树,继续水~
查看>>
"数学口袋精灵"bug(团队)
查看>>
中缀表达式转换为后缀表达式
查看>>
各数据库的连接URL和驱动器
查看>>
JS魔法堂:LINK元素深入详解
查看>>
Android开源库
查看>>
Django框架----Web框架本质
查看>>
canvas粒子时钟
查看>>
C++顺序栈基本操作
查看>>
01背包(类) UVA 10564 Paths through the Hourglass
查看>>
并查集(删除) UVA 11987 Almost Union-Find
查看>>
记忆化搜索(DFS+DP) URAL 1501 Sense of Beauty
查看>>
Codeforces Round #295 (Div. 2)
查看>>
暴力 BestCoder Round #41 1001 ZCC loves straight flush
查看>>
航院5538:House Building
查看>>
模板:排序(四)
查看>>
DAO 设计模式
查看>>
03----Mock.mock() 生成接口,随机数据
查看>>
POJ 1006 Biorhythms 中国剩余定理 数论
查看>>