一.HashMap与HashSet的区别
HashMap | HashSet |
实现了 Map 接口 | 实现 Set 接口 |
存储键值对 | 仅存储对象 |
调用 put() 向 map 中添加元素 | 调用 add() 方法向 Set 中添加元素 |
| HashSet 使用成员对象来计算 hashcode 值,对于两个对象来说 hashcode 可能相同,所以equals() 方法用来判断对象的相等性 |
二.HashMap与HashTable的区别
Hashmap | HashTable | |
线程安全性 | 非线程安全 | 线程安全 |
效率 | 高 | 略低 |
是否支撑Null key 和 Null value | 支持 | 不支持 |
初始化容量大小 | 默认为16 | 默认为11 |
每次扩容大小 | 2n + 1 | 2n |
底层数据结构 | 链表散列(jdk1.8之后当链表长度大于阈值时转换为红黑树) | 链表散列 |