(1)ArrayList以数组形式实现,顺序插入、查找快,插入、删除较慢
(2)LinkedList以链表形式实现,顺序插入、查找较慢,插入、删除方便
那么是否有一种数据结构能够结合上面两种的优点呢?有,答案就是HashMap。
关 注 点 | 结 论 |
HashMap是否允许空 | Key和Value都允许为空 |
HashMap是否允许重复数据 | Key重复会覆盖、Value允许重复 |
HashMap是否有序 | 无序,特别说明这个无序指的是遍历HashMap的时候,得到的元素的顺序基本不可能是put的顺序 |
HashMap是否线程安全 | 非线程安全 |
Entry组成的是一个单向链表,因为里面只有Entry的后继Entry,而没有Entry的前驱Entry。用图表示应该是这么一个数据结构。
1.空的Key会默认放在第0位的数组位置上
2.根据取模得到的位置,。另外,这个取模操作的正确性依赖于length必须是2的N次幂,这个熟悉二进制的朋友一定理解,因此注意HashMap构造函数中,如果你指定HashMap初始数组的大小initialCapacity,如果initialCapacity不是2的N次幂,HashMap会算出大于initialCapacity的最小2的N次幂的值,作为Entry数组的初始化大小
3.新的Entry再次占据table[1]的位置,并且持有原table[1]。
扩展:Hashmap扩容会导致死锁。
时间: 2024-10-09 04:34:02