HashSet、HashMap和HashTable的区别

54 阅读1分钟

三者出现的时间顺序是HashTable->HashMap->HashSet

查看HashSet的源代码,可以发现它是由HashMap备份然后进行所有操作,只不过HashSet里面的HashMap所有的value都是同一个Object。可以理解为简化版的 HashMap

HashMapHashSet
实现了Map接口实现了Set接口
存储键值对存储对象
调用 put()Map 中添加元素调用 add()方法向 Set 中添加元素
不允许重复键,但允许重复值。不允许重复元素
允许单个空键和任意数量的空值允许具有单个空值
使用键计算 hashcode   使用成员对象来计算 hashcode ,对于两个对象 hashcode 可能相同,所以equals()方法用来判断对象的相等性
HashMapHashTable
线程安全性非线程安全线程安全
键值为空支持不支持
默认容量1611
扩容容量翻倍容量翻倍+1
效率

HashMap 的 7 种遍历方式与性能分析