HashMap
1. jdk1.8后,HashMap的底层实现是采用数组+链表或红黑树的数据结构。
2. HashMap的存储过程:首先使用put(key,value)储存对象到HashMap中,可以使用get(key)从HashMap中获取对象。
- 当HashMap获取键和值时,通过HashCode()计算key的哈希值,将键和值包装成Entry数组储存到HashMap中。
- 若查找的哈希表位置为空,则直接储存。如果哈希表位置不为空,则利用equals方法比较它的key,结果为true则覆盖value。结果为false则以链表的方式接到后面。
3. 当哈希表实际节点数达到容量的75%的时候需要调用resize方法进行扩容。扩容的过程:
- HashMap的默认容量时16,负载因子为0.75。当HashMap储存程度达到容量的75%时,将会创建原来大小两倍的数组,并将数组重新hash放入新的bucket中,所以频繁的扩容会消耗性能。
- 至于扩容到原来的两倍是为了避免内存碎片,提高运算速度,通过高位异或,提高散列度,降低冲突。