HashMap的存储原理

Posted shirley18

tags:

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

H ashMap是<key, value>,不能用来存储重复的键

1、调用key的hashCode()方法生成一个hash值h1,如果这个h1在haspMap中不存在,那么直接将<key, value>值存进去。

2、如果h1已经存在,那么找到HashMap中所有hash值为h1的key,然后分别调用key的equals()方法判断当前添加的key值是否与已经存在的key值相同。

     2.1、如果equals()返回的是true,说明key相同,说明key值已经存在,那么会用新的value值覆盖旧的value值

     2.2、如果equals()返回的是false,说明key在hashMap里不存在,因此会在HashMap中创建新的映射关系。  这种情况会产生冲突。采用链地址法来解决冲突。

       

查找的过程:具体:从HashMap中通过key查找value时,首先调用key的hashCode()方法来获取key的hash值h,那么这样可以确定键为key的所有值得首地址(keyList)。如果h对应的key值有多个,那么程序会遍历所有的key,通过调用所有的key的equals()方法来判断key的内容是否相等。只有当equals()方法的返回值为true时,对应的value才是正确的结果。

 

Object类默认的hashCode()方法和equals()方法的比较规则如下:当参数obj引用的对象与当前对象为同一个对象时,就返回true,否则返回false。hashCode()方法会返回对象存储的内存地址。

因此,如果想根据对象的相关属性来定义对象是否相同的逻辑,就需要重写equals方法,一旦重写了equals方法,那么必须重写hashcode方法。

          当定义类作为hashMap的key时,最好把这个类定义为不可变类。。

          如果两个对象相等,那么这两个对象有相同的hashcode,但是hashcode相同,对象不一定相同。

以上是关于HashMap的存储原理的主要内容,如果未能解决你的问题,请参考以下文章

HashMap存储原理

【golang】HashMap原理和实现

HashMap的存储原理

HashMap的存储原理

浅谈HashMap 的底层原理

Hashmap的实现原理