您的位置:首页 > 其它

HashSet、HashMap和Hashtable区别

2017-08-31 10:43 453 查看
这篇博客的知识有点杂,有耐心的可以读下去

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是已经进行排序过的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  集合 hashtable hashmap