Java HashMap和HashSet的区别
HashSet是Set接口的一个实现,不允许有重复的值。最主要的是,存储在HashSet中的对象必须覆盖equals()方法来检查是否相等,以及hashCode()方法来保证没有重复的值被存储在我们的集合中。HashMap是Map接口的一个实现,它将一个键映射到值。在Map中不允许有重复的键。基本上,Map接口有两个实现类HashMap和TreeMap,主要区别在于TreeMap保持对象的顺序,而HashMap不会。HashSet和HashMap都是不同步的。
现在让我们以表格的方式来阐述HashMap和HashSet的区别,如下所示。
基本 | HashSet | HashMap |
---|---|---|
执行 | 集合接口 | Map接口 |
重复的 | 不允许 | 是的,允许重复的值,但不允许重复的键。 |
虚值 | 有 | 不允许 |
在添加操作中需要的对象 | 1 | 2 |
添加和存储机制 | HashMap对象 | 哈希技术 |
速度 | 相对来说,它比HashMap慢。 | 因为这里使用了散列技术,所以相对来说比HashSet快。 |
空值 | 有一个单一的空值 | 单个空键和任意数量的空值 |
插入方法 | 添加() | 放置() |
让我们在干净的java程序的帮助下,通过对内部工作的窥探来掌握理解。
例子1: HashSet
输出
例2: HashMap
输出
在了解了以上两个输出的内部工作后,现在我们可以谈谈概念上的区别,具体如下。
- 实现: HashMap实现了Map接口,HashSet实现了Set接口。
- 重复: HashSet不允许有重复的值。HashMap存储键,值对,它不允许重复的键。如果键是重复的,那么旧的键会被新的值替换。
- 存储对象时的对象数量: HashMap需要两个对象put(K key, V Value)来向HashMap对象添加一个元素,而HashSet只需要一个对象add(Object o)
- 虚值: 在HashMap中没有虚值的概念,
HashSet内部使用HashMap来添加元素。在HashSet中, add(Object) 方法中传递的参数作为键K,Java内部为add(Object)方法中传递的每个值关联假值。 - 存储或添加机制: HashMap内部使用散列来存储或添加对象,HashSet内部使用HashMap对象来存储或添加对象。
- 速度: HashSet的速度比HashMap慢。
- 插入 HashMap使用put()方法来存储数据,而在HashSet中使用add()方法来添加或存储数据。
让我们用一个例子来总结一下
这里,在HashMap的例子中,不能有重复的键,但它可能有重复的值。在HashSet中,必须没有重复的元素