【HashMap 和 HashSet 的区别
HashSet 是设置接口的实现,不允许重复值。最主要的是,存储在 HashSet 中的对象必须重写 equals()以检查是否相等,并且没有重复值的 hashCode()方法存储在我们的集中。 HashMap 是映射接口的实现,将一个键映射为值。地图中不允许有重复的键。基本上,Map Interface 有两个实现类 HashMap 和 TreeMap 主要区别是 TreeMap 维护对象的顺序,而 HashMap 不会。HashMap 允许空值和空键。哈希集和哈希映射都不同步。
现在让我们用表格的方式来表达 HashMap 和 HashSet 之间的区别,如下所示:
| 基础 | 哈希集 | HashMap | | --- | --- | --- | | 工具 | 设置界面 | 地图界面 | | 复制 | 不 | 是允许重复值,但不允许重复键 | | 虚拟值 | 是 | 不 | | 添加操作期间所需的对象 | one | Two | | 添加和存储机制 | HashMap 对象 | 散列技术 | | 速度 | 它比哈希映射相对慢 | 它比 HashSet 相对更快,因为这里使用了散列技术。 | | 空 | 只有一个空值 | 单个空键和任意数量的空值 | | 插入方法 | 添加() | 放() |让我们借助干净的 java 程序,通过窥视内部工作来掌握理解。
例 1: HashSet
Java 语言(一种计算机语言,尤用于创建网站)
// Java program to demonstrate working of HashSet
// Importing HashSet class from java.util package
import java.util.HashSet;
// Mai class
public class GFG {
// Main driver method
public static void main(String[] args)
{
HashSet<String> hs = new HashSet<String>();
// Adding elements to the HashSet
hs.add("geeks");
hs.add("practice");
hs.add("contribute");
;
System.out.println(
"Before adding duplicate values \n\n" + hs);
// Addition of duplicate elements
hs.add("geeks");
hs.add("practice");
System.out.println(
"\nAfter adding duplicate values \n\n" + hs);
// Addition of null values
hs.add(null);
hs.add(null);
// Displaying HashSet elements
System.out.println("\nAfter adding null values \n\n"
+ hs);
}
}
Output
Before adding duplicate values
[practice, geeks, contribute]
After adding duplicate values
[practice, geeks, contribute]
After adding null values
[null, practice, geeks, contribute]
例 2: HashMap
Java 语言(一种计算机语言,尤用于创建网站)
import java.util.HashMap;
public class HashMapExample {
public static void main(String[] args)
{
// This is how to declare HashMap
HashMap<Integer, String> hm = new HashMap<Integer, String>();
// Adding elements to HashMap*/
hm.put(12, "geeks");
hm.put(2, "practice");
hm.put(7, "contribute");
System.out.println("\nHashMap object output :\n\n" + hm);
// store data with duplicate key
hm.put(12, "geeks");
System.out.println("\nAfter inserting duplicate key :\n\n" + hm);
}
}
Output:
HashMap object output :
{2=practice, 7=contribute, 12=geeks}
After inserting duplicate key :
{2=practice, 7=contribute, 12=geeks}
通过以上两个输出,在了解了它们的内部工作之后,现在我们可以谈论如下的概念差异:
- 实现: HashMap 实现 Map 接口,HashSet 实现 Set 接口。
- 重复:哈希集不允许重复值。HashMap 存储键、值对,并且不允许重复键。如果密钥是重复的,那么旧密钥将被新值替换。
- 存储对象时的对象数: HashMap 需要放两个对象(K 键,V 值)才能给 HashMap 对象添加一个元素,而 HashSet 只需要添加一个对象(Object o)
- 伪值:在 HashMap 中没有伪值的概念, HashSet 内部使用 HashMap 添加元素。在 HashSet 中, add(Object) 方法中传递的参数充当密钥 k。Java 在内部为 add(Object)方法中传递的每个值关联伪值。
- 存储或添加机制: HashMap 内部使用哈希来存储或添加对象,HashSet 内部使用 HashMap 对象来存储或添加对象。
- 速度: HashSet 比 HashMap 慢。
- 插入 HashMap 使用 put()方法存储数据,而在 HashSet 中使用 add()方法添加或存储数据。
让我们以一个例子结束
HashSet is a set, e.g. {1, 2, 3, 4, 5, 6, 7},
HashMap is a key -> value pair(key to value) map, e.g. {a -> 1, b -> 2, c -> 2, d -> 1}
这里,在 HashMap 的例子中,不能有重复的键,但是它可能有重复的值。在哈希集中,不能有重复的元素
版权属于:月萌API www.moonapi.com,转载请注明出处