JDK7和JDK8中HashMap实现的区别?

在JDK7中,HashMap是基于一个数组和多个链表的实现**(位桶+链表)**,当遇到散列冲突时,就将对应的元素以链表的形式储存。但是这样子的话HashMap的性能就会比较低,因为如果当数据比较多,发生冲突的元素也会越来越多,这时候链表中就会存储有很多元素,在查找上会消耗O(n)的时间。

因为在最坏的情况,链表的时间复杂度为O(n),而红黑树为O(logn),当链表中的元素达到某个阀值时,使用红黑树的效率会比较高。

所以在JDK8中,采用的是位桶+链表/红黑树的方式,也是非线程安全的,当同一个hash值的节点数不小于8时,将不再以单链表的形式存储了,会被调整成一颗红黑树,这就是JDK7与JDK8中HashMap实现的最大区别。

猜你喜欢

转载自blog.csdn.net/weixin_41163113/article/details/84975534