三者出现的时间顺序是HashTable->HashMap->HashSet
查看HashSet
的源代码,可以发现它是由HashMap
备份然后进行所有操作,只不过HashSet
里面的HashMap
所有的value都是同一个Object。可以理解为简化版的 HashMap
HashMap | HashSet |
---|---|
实现了Map接口 | 实现了Set接口 |
存储键值对 | 存储对象 |
调用 put() 向 Map 中添加元素 | 调用 add() 方法向 Set 中添加元素 |
不允许重复键,但允许重复值。 | 不允许重复元素 |
允许单个空键和任意数量的空值 | 允许具有单个空值 |
使用键计算 hashcode | 使用成员对象来计算 hashcode ,对于两个对象 hashcode 可能相同,所以equals() 方法用来判断对象的相等性 |
HashMap | HashTable | |
---|---|---|
线程安全性 | 非线程安全 | 线程安全 |
键值为空 | 支持 | 不支持 |
默认容量 | 16 | 11 |
扩容 | 容量翻倍 | 容量翻倍+1 |
效率 | 高 | 低 |