HashMapMap 的一个实现类,它代表的是一种键值对的数据存储形式。

大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。

HashMap最多只允许一条记录的键为null,允许多条记录的值为null。不保证有序 (比如插入的顺序)、也不保证序不随时间变化。

jdk 8 之前,其内部是由数组 + 链表来实现的,而 jdk 8 对于链表长度超过8的链表将转储为红黑树

HashMap非线程安全,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。如果需要满足线程安全,可以用 CollectionssynchronizedMap方法使HashMap具有线程安全的能力,或者使用ConcurrentHashMap

HashMap数组 + 链表 + 红黑树(JDK1.8 增加了红黑树部分)实现的。JDK 1.8 之所以添加红黑树是因为一旦链表过长,会严重影响 HashMap 的性能,而红黑树具有快速增删改查的特点,这样就可以有效的解决链表过长时操作比较慢的问题。