更具体一点,HashSet内部使用 a HashMap,看一下实现HashSet.java
private transient HashMap<E,Object> map;
Run Code Online (Sandbox Code Playgroud)
正如之前的答案和 HashMap 的 JavaDoc 中所述,HashMap 实现基于哈希表数据结构:
基于哈希表的 Map 接口实现。此实现提供了所有可选的映射操作,并允许空值和空键。(HashMap 类大致相当于 Hashtable,只不过它是不同步的并且允许 null。)该类不保证映射的顺序;特别是,它不保证顺序随着时间的推移保持不变。
java.util 包中还提供了一个Hashtable(识别小写的t )。JavaDoc 中也说明了主要区别:
与新的集合实现不同,Hashtable 是同步的。如果不需要线程安全的实现,建议使用HashMap代替Hashtable。如果需要线程安全的高并发实现,那么建议使用ConcurrentHashMap代替Hashtable。
也就是说,JavaDoc 声明Hashtable永远不应该使用它。如果您需要线程安全的实现,请使用ConcurrentHashMap,否则使用HashMap. 如果您需要并发集,您应该查看为什么没有针对 ConcurrentHashMap 的 ConcurrentHashSet。如果您正在寻找一个好的 set 实现,只需使用HashSet(内部只不过是 a HashMap)。
两者HashMap并HashSet用哈希表(注意小写!),这是写某一种数据结构的一般方法的名称.你可以编写自己的哈希表; 我写了自己的哈希表; 哈希表只是一种通用的数据结构设计,就像你可以使用未实现的链表一样LinkedList.(注意HashSet实际上是使用HashMap,但这对您的问题并不是特别重要.)
Hashtable是HashMap不再推荐使用的类型的Java API ,因为HashMap它的工作基本上更好.你永远不应该使用它.
| 归档时间: |
|
| 查看次数: |
2618 次 |
| 最近记录: |