HashMap, Hashtable, HashSet的区别

首先, 我们来看,Javadoc对这三者的描述,


HashMap, Hash table based implementation of the Map interface. This implementation provides all of the optional map operations, and permits null values and the null key.


Hashtable, This class implements a hash table, which maps keys to values. Any non-null object can be used as a key or as a value.


HashSet, This class implements the Set interface, backed by a hash table (actually a HashMap instance). It makes no guarantees as to the iteration order of the set; in particular, it does not guarantee that the order will remain constant over time.

首先呢, 大家应该清楚Map和Set这两个接口直接是没有任何联系的, 一个是键值对的关系, 一个是集合。

HashMap 和Hashtable的区别

Hashtable, 大家有没有发现他不符合驼峰命名, 因为他是个历史遗留类, 我们要记住一点, 能用HashMap解决的事情就不要用Hashtable, 这两个类从功能上基本是相同的, 只是Hashtable的每个方法都是同步的, 保证了线程安全, 而最大的问题是Hashtable也是因为他对每个方法都加了锁, 而通常加锁是要根据我们的具体使用情况来定的, 这样一概全加锁的方式是不可取的。 而由此呢, 就出现了HashMap以及HashMap衍生的线程安全类ConcurrentHashMapcurrentHashMap, 你也可以通过Collections.synchronizedMap来获得一个线程安全的MapMap m = Collections.synchronizedMap(new HashMap())

HashSet

从功能上来讲, 跟上面两个完全没关系, 只是HashSet的内部实现使用了HashMap, 就这些区别

你可能感兴趣的:(HashMap, Hashtable, HashSet的区别)