HashMap源码中如何实现键值对存储机制?
- 内容介绍
- 相关推荐
本文共计8915个文字,预计阅读时间需要36分钟。
每当你想努力一把的时候,都是未来的你在求救!
1.概述
HashMap是我们开发中非常常用的一个键值对集合。底层基于散列算法实现,允许存储null值和null键,但键不能重复。每当你想要努力一把的时候,都是未来的你在求救!!!
1. 概述HashMap 是我们开发中很常用的一个键值对集合。底层基于散列算法实现,HashMap 允许 Null 值和 Null 键,并且键不能重复(重复会被覆盖),计算键的 Hash 值时 Null 键的哈希值是 0。另外,HashMap 不保证插入顺序,并且 HashMap 是非线程安全的,在多线程下可能会导致一些问题,如:
HashMap进行put操作会引起死循环,导致CPU利用率接近100%(后面有解释为什么会死循环哦);- 多线程本来一共要 put 进1000个不同的键,结果只 put 进了 998个。
HashMap 底层是基于拉链式的散列算法实现的,在 JDK1.7 中是数组+链表,在JDK1.8 中是 数组+链表+红黑树,使用红黑树优化过长的链表。JDK1.8 中数据结构示意图:
在JDK1.8 中是 数组+链表+红黑树。
本文共计8915个文字,预计阅读时间需要36分钟。
每当你想努力一把的时候,都是未来的你在求救!
1.概述
HashMap是我们开发中非常常用的一个键值对集合。底层基于散列算法实现,允许存储null值和null键,但键不能重复。每当你想要努力一把的时候,都是未来的你在求救!!!
1. 概述HashMap 是我们开发中很常用的一个键值对集合。底层基于散列算法实现,HashMap 允许 Null 值和 Null 键,并且键不能重复(重复会被覆盖),计算键的 Hash 值时 Null 键的哈希值是 0。另外,HashMap 不保证插入顺序,并且 HashMap 是非线程安全的,在多线程下可能会导致一些问题,如:
HashMap进行put操作会引起死循环,导致CPU利用率接近100%(后面有解释为什么会死循环哦);- 多线程本来一共要 put 进1000个不同的键,结果只 put 进了 998个。
HashMap 底层是基于拉链式的散列算法实现的,在 JDK1.7 中是数组+链表,在JDK1.8 中是 数组+链表+红黑树,使用红黑树优化过长的链表。JDK1.8 中数据结构示意图:
在JDK1.8 中是 数组+链表+红黑树。

