Java HashMap和HashSet的区别

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

// 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);
    }
}
Java

输出

Before adding duplicate values 

[practice, geeks, contribute]

After adding duplicate values 

[practice, geeks, contribute]

After adding null values 

[null, practice, geeks, contribute]
Java

例2: HashMap

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(7, "geeks");
        hm.put(12, "contribute");
 
        System.out.println("\nAfter inserting duplicate key :\n\n" + hm);
    }
}
Java

输出

HashMap object output :

{2=practice, 7=contribute, 12=geeks}

After inserting duplicate key :

{2=practice, 7=geeks, 12=contribute}
Java

在了解了以上两个输出的内部工作后,现在我们可以谈谈概念上的区别,具体如下。

  1. 实现: HashMap实现了Map接口,HashSet实现了Set接口。
  2. 重复: HashSet不允许有重复的值。HashMap存储键,值对,它不允许重复的键。如果键是重复的,那么旧的键会被新的值替换。
  3. 存储对象时的对象数量: HashMap需要两个对象put(K key, V Value)来向HashMap对象添加一个元素,而HashSet只需要一个对象add(Object o)
  4. 虚值: 在HashMap中没有虚值的概念,
    HashSet内部使用HashMap来添加元素。在HashSet中, add(Object) 方法中传递的参数作为键K,Java内部为add(Object)方法中传递的每个值关联假值。
  5. 存储或添加机制: HashMap内部使用散列来存储或添加对象,HashSet内部使用HashMap对象来存储或添加对象。
  6. 速度: HashSet的速度比HashMap慢。
  7. 插入 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}
Java

这里,在HashMap的例子中,不能有重复的键,但它可能有重复的值。在HashSet中,必须没有重复的元素

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册