HashMap底层原理以及与ConCurrentHashMap区别

Posted stanljj

tags:

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

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

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

在hashMap的基础上,ConcurrentHashMap将数据分为多个segment,默认16个(concurrency level),然后每次操作对一个segment加锁,避免多线程锁得几率,提高并发效率。

默认一个ConcurrentHashMap中有16个子HashMap,所以相当于一个二级哈希。对于所有的操作都是先定位到子HashMap,再作相应的操作。

HashMap的键值对允许有null,但是ConCurrentHashMap都不允许。

以上是关于HashMap底层原理以及与ConCurrentHashMap区别的主要内容,如果未能解决你的问题,请参考以下文章

HashMap底层原理以及与ConCurrentHashMap区别

HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别

HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别

HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别

(转)HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别

HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别