🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# `HashSet`和`HashMap`之间的区别 > 原文: [https://beginnersbook.com/2014/08/hashset-vs-hashmap-java/](https://beginnersbook.com/2014/08/hashset-vs-hashmap-java/) 在本文中,我们将讨论[`HashSet`](https://beginnersbook.com/2013/12/hashset-class-in-java-with-example/)和[`HashMap`](https://beginnersbook.com/2013/12/hashmap-in-java-with-example/)类之间的差异。 ## `HashSet` vs `HashMap` **差异:** | `HashSet` | `HashMap` | | --- | --- | | `HashSet`类实现`Set`接口 | `HashMap`类实现了`Map`接口 | | 在`HashSet`中,我们存储对象(元素或值),例如如果我们有一个字符串元素的`HashSet`,那么它可以描述一组`HashSet`元素:`{"Hello", "Hi", "Bye", "Run"}` | `HashMap `于存储键值对。简而言之,它保持了键和值的映射。(`HashMap`类大致相当于`Hashtable`,除了它是不同步的并且允许空值。)如果`HashMap`元素具有整数键和`String`类型的值,则可以表示`HashMap`元素:`{1->"Hello", 2->"Hi", 3->"Bye", 4->"Run"}` | | `HashSet`不允许重复元素,这意味着您无法在`HashSet`中存储重复值。 | `HashMap`不允许重复键,但它允许重复值。 | | `HashSet`允许具有单个空值。 | `HashMap`允许单个`null`键和任意数量的空值。 | **相似之处:** 1)`HashMap`和`HashSet`都不同步,这意味着它们不适合线程安全操作`unitl`,除非明确同步。这是你可以明确地同步它们的方法: `HashSet`: ```java Set s = Collections.synchronizedSet(new HashSet(...)); ``` `HashMap`: ```java Map m = Collections.synchronizedMap(new HashMap(...)); ``` 2)这两个类都不保证其元素的顺序会随着时间的推移保持不变。 3)如果查看`HashSet`的源代码,您可能会发现它由`HashMap`备份。所以基本上它在内部使用`HashMap`进行所有操作。 4)它们都为基本操作提供恒定的时间性能,例如添加,删除元素等。 #### `HashSet`示例 ```java import java.util.HashSet; class HashSetDemo{ public static void main(String[] args) { // Create a HashSet HashSet<String> hset = new HashSet<String>(); //add elements to HashSet hset.add("AA"); hset.add("BB"); hset.add("CC"); hset.add("DD"); // Displaying HashSet elements System.out.println("HashSet contains: "); for(String temp : hset){ System.out.println(temp); } } } ``` **输出:** ```java HashSet contains: AA BB CC DD ``` #### `HashMap`示例 ```java import java.util.HashMap; class HashMapDemo{ public static void main(String[] args) { // Create a HashMap HashMap<Integer, String> hmap = new HashMap<Integer, String>(); //add elements to HashMap hmap.put(1, "AA"); hmap.put(2, "BB"); hmap.put(3, "CC"); hmap.put(4, "DD"); // Displaying HashMap elements System.out.println("HashMap contains: "+hmap); } } ``` **输出:** ```java HashMap contains: {1=AA, 2=BB, 3=CC, 4=DD} ``` #### 参考: [`HashSet` javadoc](https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html) [`HashMap` javadoc](https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html)