HashSet、HashMap和Hashtable区别

本文深入探讨了HashSet作为Set集合的一种实现方式,以及HashMap和Hashtable作为Map集合子类的特点。对比了HashSet、HashMap与Hashtable的底层实现机制,并分析了它们之间的性能差异。此外,还介绍了如何使用Collections工具类来提升集合的线程安全性。

这篇博客的知识有点杂,有耐心的可以读下去

1.HashSet是一个Set集合的实现类,HashMap和Hashtable是Map集合的子类

2.HashSet和HashMap、Hashtable底层都是通过hash表来存储元素。
也就是通过hash算法原定元素的存储位置。

但是HashMap和Hashtable通过hash表存储的是它的key。
而HashSet存储的是它的元素。(因为set集合不是key-value对)


关于HashSet,大家可以参考我的另一片博客:
JAVA集合之—TreeSet、HashSet、EnumSet


3.效率相关的。
常常会有面试题会问:谈谈HashMap和Hashtable的区别?
HashMap和Hashtable底层原理很相似。所以效率是差不多的。但是HashMap比Hashtable速度更快一点。因为,Hashtable是一个比较老的类,而且它是线程安全的类。
而HashMap是线程不安全的类。但是我们通常还是会选用hashMap,如果需要线程安全的情况,则可以是用Collections工具来来操作
比如

Map map = Collections.synchronized(new HashMap());

这里讲一个Collections工具类的作用。

它可以帮助我们遍历集合,对集合元素操作,做重要的是,它可以帮我们把线程不安全的类编程线程安全的类。

我们可以通过Collections工具类来包装我们需要用到的集合
例如:

Collection c = Collections.synchronized(new ArrayList());
List list  = Collections.synchronized(new ArrayList());
Set s = Collections.synchronized(newHashSet()):
Map map = Collections.synchronized(new HashMap());

这有点类似迁移篇博客:
中的ArrayList和Vector的区别
JAVA集合之—LinkedList、ArrayList与Vector


这里额外补充一个集合TreeMap集合。

它的相率比HashMap和Hashtable都低很多。因为TreeMap集合的元素的key要通过红黑树算法来排序。所以TreeMap集合的元素默认的key是已经进行排序过的。

1. HashMap Hashtable区别 HashMap Hashtable 都是用于存储键值对的集合类,它们之间的区别如下: - 线程安全性:Hashtable 是线程安全的,而 HashMap 是非线程安全的,如果需要在多线程环境下使用 HashMap,需要保证线程同步。 - null 值:Hashtable 不允许键或值为 null,而 HashMap 允许键或值为 null。 - 继承关系:Hashtable 是早期 Java 类库中的类,而 HashMap 是 Java 1.2 之后引入的类,它继承了 AbstractMap 类。 2. HashMap HashSet区别 HashMap HashSet 都是用于存储元素的集合类,它们之间的区别如下: - 存储方式:HashMap 存储键值对,而 HashSet 存储唯一的元素。 - 底层实现:HashMap 是基于哈希表实现的,而 HashSet 是基于 HashMap 实现的(底层使用 HashMap 存储元素)。 3. HashMap TreeMap 的区别 HashMap TreeMap 都是用于存储键值对的集合类,它们之间的区别如下: - 存储方式:HashMap 是基于哈希表实现的,而 TreeMap 是基于红黑树实现的,因此 TreeMap 可以对元素进行排序。 - 性能:HashMap 的插入查找操作的时间复杂度都是 O(1),而 TreeMap 的插入查找操作的时间复杂度都是 O(log n),因此 HashMap 的性能比 TreeMap 更高效。 - 排序:HashMap 不支持对元素进行排序,而 TreeMap 可以对元素进行排序。 总的来说,HashMap HashSet 都是非常常用的集合类,在实际开发中需要根据具体的需求选择使用哪种集合类。而 TreeMap 则适用于需要对元素进行排序的场景。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值