HashMap的工作原理

来源:互联网 发布:返利软件 知乎 编辑:程序博客网 时间:2024/06/06 02:03

HashMap的工作原理

  HashMap基于hashing原理,我们可以通过put(key, value)存储对象到HashMap中,可以通过get(key)从HashMap中获取对象。当我们将键值对传递给put()方法时,它先会调用key(键对象)的hashCode()方法来计算其hashCode,然后通过hashCode找到bucket位置的Entry对象(里面储存了key(键对象)和value(值对象)。

碰撞探测和解决方法:

(1)当两个key(键对象)的hashCode相同会发生什么?

      他们有equals()和hashCode()方法,所以两个对象就算是hashCode相同,他们也是有可能不相等的。但是hashCode相同,所以他们的bucket位置就是相同的,“碰撞”就会发生。

      因为HashMap使用了LinkedList存储对象,所以这个Entry(包含有键值对的Map.Entry对象)会存储在LinkedList中。

(2)当两个key(键对象)的hashCode相同,如何获取值对象?

当调用get(key)方法,HashMap会使用键对象的hashCode找到bucket位置,然后获取value(值对象)。

        (两个值对象存储在同一个bucket)--》 遍历所有的LinkedList直到找到值对象。

(没有值对象去比较,如何确定找到值对象?【HashMap在linkedList中存储的是键值对】) --》 找到bucket位置后,会调用keys.equals()方法去找到LinkedList中正确的节点,从而找到值对象。


HashMap的大小、负载因子

  默认的负载因子大小为0.75。即 当一个map填满了75%的bucket时候,和其它集合类(如ArrayList等)一样,将会创建原来HashMap大小的两倍的bucket数组,来重新调整map的大小,并将原来的对象放入新的bucket数组中。这个过程叫作rehashing(调用hash方法找到新的bucket位置)。

1 0
原创粉丝点击