java中hashmap的实现原理

Posted towerbird

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中hashmap的实现原理相关的知识,希望对你有一定的参考价值。

HashMap底层是一个数组,通过允许冲突来实现大小可扩充。数组的下标是对象的散列码,存储的是list,查询list的时候是线性equals()比较(所以速度的瓶颈在于不能让list过长,也就是数据不能太集中)。

放入HashMap的对象要实现2个方法,hashCode()和equals()。

equals()正确的实现必须满足5个条件:

1、自反性:x.equals(x)必为true

2、对称性:x.equals(y)等于y.equals(x)

3、传递性:若x.equals(y)为true,且y.equals(z)为true,必有x.equals(z)为true

4、一致性:x.equals(y)的值不会因为调用次数的改变而改变

5、x不是null时,x.equals(null)比为false

hashCode()的编写:

1、hashCode()不应依赖于易变的数据,同一个对象调用hashCode()返回的值必须相等

2、不应使用this,此时put()和get()产生的hashCode()也不相同

3、对于hashCode()来说,应该更关注生成速度而不是唯一性,它是允许冲突的

4、应该要分布均匀

如何编写好的散列码已经有了较好的指导:

1、初始化结果int hashcode=17

2、添加每一个域,如有两个成员String name;和int id;,则

hashcode=hashcode*37+name的哈希码;

hashcode=hashcode*37+id的哈希码;

至于域的哈希码如何计算,详情见《java编程思想》496(溜了

 

以上是关于java中hashmap的实现原理的主要内容,如果未能解决你的问题,请参考以下文章

1.Java集合-HashMap实现原理及源码分析

java——HashMap的实现原理,自己实现简单的HashMap

java中hashmap的实现原理

Java进阶教程:HashMap实现原理

深入Java集合学习系列:HashMap的实现原理

Java 揭秘 HashMap 实现原理(Java 8)