美文网首页
HashMap的工作原理

HashMap的工作原理

作者: 奶盐味小圆饼 | 来源:发表于2020-05-19 10:53 被阅读0次

HashMap的工作原理

HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap使用LinkedList来解决碰撞问题,当发生碰撞了,对象将会储存在LinkedList的下一个节点中。 HashMap在每个LinkedList节点中储存键值对对象。

当两个不同的键对象的hashcode相同时会发生什么? 它们会储存在同一个bucket位置的LinkedList中。键对象的equals()方法用来找到键值对。

1. 为什么String, Interger这样的wrapper类适合作为键?

String, Interger这样的wrapper类作为HashMap的键是再适合不过了,而且String最为常用。因为String是不可变的,也是final的,而且已经重写了equals()和hashCode()方法了。其他的wrapper类也有这个特点。不可变性是必要的,因为为了要计算hashCode(),就要防止键值改变,如果键值在放入时和获取时返回不同的hashcode的话,那么就不能从HashMap中找到你想要的对象。不可变性还有其他的优点如线程安全。如果你可以仅仅[](通过将某个field声明成final就能保证hashCode是不变的,那么请这么做吧。因为获取对象的时候要用到equals()和hashCode()方法,那么键对象正确的重写这两个方法是非常重要的。如果两个不相等的对象返回不同的hashcode的话,那么碰撞的几率就会小些,这样就能提高HashMap的性能。

2. 我们可以使用自定义的对象作为键吗?

这是前一个问题的延伸。当然你可能使用任何对象作为键,只要它遵守了equals()和hashCode()方法的定义规则,并且当对象插入到Map中之后将不会再改变了。如果这个自定义对象时不可变的,那么它已经满足了作为键的条件,因为当它创建之后就已经不能改变了。

3. 我们可以使用CocurrentHashMap来代替HashTable吗?

这是另外一个很热门的面试题,因为ConcurrentHashMap越来越多人用了。我们知道HashTable是synchronized的,但是ConcurrentHashMap同步性能更好,因为它仅仅根据同步级别对map的一部分进行上锁。ConcurrentHashMap当然可以代替HashTable,但是HashTable提供更强的线程安全性。

4. 如果HashMap的大小超过了负载因子(load factor)定义的容量,怎么办?

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

相关文章

  • hashmap底层原理

    1、“你知道HashMap的工作原理吗?” “你知道HashMap的get()方法的工作原理吗?” HashMap...

  • Java 源码研究之 HashMap

    本文是在观看 Java HashMap 工作原理及实现 后,虽然大致了解了 HashMap 的工作原理及实现,但是...

  • HashMap底层实现原理/HashMap与HashTable区

    ①HashMap的工作原理 HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象...

  • HashMap和HashTable以及ConcurrentHas

    总结 HashMap的工作原理 HashMap基于hashing原理,我们通过put()和get()方法储存和获取...

  • HashMap的工作原理

    HashMap的工作原理 HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。...

  • HashMap Notes

    To Solve: 什么时候会使用HashMap?有什么特点? HashMap的工作原理? get和put的原理?...

  • Android面试一问一答:HashMap

    HashMap的工作原理 HashMap底层由数组实现,是基于hashing原理,我们通过put()和get()方...

  • HashMap工作原理

    HashMap数据结构 常用的底层数据结构主要有数组和链表。数组存储区间连续,占用内存较多,寻址容易,插入和删除困...

  • HashMap 工作原理

    1.概述 学习本文你可以了解到: HashMap 是什么样的内部结构?有什么特点? 他的工作原理是什么样? equ...

  • HashMap工作原理

    相信大家不管是在Java还是安卓面试过程中,或多或少都会被问及HashMap的工作原理,小编今天大概看了一下And...

网友评论

      本文标题:HashMap的工作原理

      本文链接:https://www.haomeiwen.com/subject/ddbvohtx.html