标签 java 下的文章

HashMap 是线程安全的吗?多线程下会有什么问题?HashMap的线程不安全可能会引发以下问题:多线程下的扩容死循环:在JDK 1.7中,HashMap使用头插法插入元素,当多个线程同时进行扩容操作时,可能会导致环形链表的出现,进而形成死循环。为了解决这个问题,JDK 1.8改为使用尾插法插入元素,保持链表元素原本的顺序,避免了环形链表的问题。

- 阅读剩余部分 -

jdk1.8对HashMap主要做了哪些优化呢?为什么?JDK 1.8对HashMap进行了五点优化,具体如下:数据结构:数组+链表的组合改为了数组+链表或红黑树的组合。原因:当发生哈希冲突时,元素会被存储在链表中。但是当链表长度过长时,JDK 1.8会将链表转换为红黑树,从而将查找时间复杂度从O(n)降低到O(logn),提升性能。

- 阅读剩余部分 -

那扩容机制了解吗?HashMap是通过数组+链表和红黑树的组合实现的。在HashMap中,用于存放key值的桶数组的长度是固定的,由初始化参数确定。随着数据的插入数量增加和负载因子的作用,可能需要对HashMap进行扩容以容纳更多的数据。在扩容过程中,JDK 1.8引入了一项优化操作,可以避免重新计算每个元素的哈希值。

- 阅读剩余部分 -