第11题(2023/9/16)
HashMap和HashTable有什么区别?其底层实现是什么?
答:
区别:
(1)HashMap没有synchronized修饰,线程不安全,而HashTable线程安全
(2)HashMap中key值和value值允许为空,HashTable不为空
底层实现:数组加链表
jdk8开始 链表高度为8,数组长度超过64,链表转化为红黑树,元素node以内部类node节点存在
计算key的hash值,对数组长度取模,找到对应的数组下标
如果没有产生hash冲突,则直接创建node存入数组
产生hash冲突,使用拉链法解决冲突。当链表高度达到8,数组长度到64时,链表转换为红黑树,长度低于6后,红黑树重新转换为链表。
key为null,存在下标为 0 的位置
hashmap中的数组扩容机制与arrayList中的扩容机制一致