Java中HashSet和HashMap类之间的区别
Java中
HashMap</strong>和
HashSet 是最受欢迎的Collection类。两者都用于数据结构。下表描述了HashMap和HashSet之间的区别:
HashMap</td>
| HashSet |
Java HashMap是基于哈希表的Map接口实现。 |
HashSet是一个Set。它创建一个使用哈希表进行存储的集合。 |
HashMap实现了 Map,Cloneable和Serializable 接口。 |
HashSet实现 Set,Cloneable,Serializable,Iterable 和 Collection 接口。 |
在HashMap中,我们存储一个键值对。它维护键和值的映射。 |
在HashSet中,我们存储对象。 |
不允许重复键,但允许重复值。 |
它不允许重复值。 |
它可以包含一个单个null键和多个null值。 |
它可以包含单个空值。 |
HashMap使用 put()方法在HashMap中添加元素。 |
HashSet使用 add()方法在HashSet中添加元素。 |
HashMap比HashSet更快/,因为值与唯一键相关联。 |
HashSet比HashMap<strong>慢,因为成员对象用于计算哈希码值,这对于两个对象可以相同。 |
在添加操作期间仅创建一个对象。 |
在放置操作期间创建了两个对象,一个用于键,一个用于 value 。 |
HashMap在内部使用散列来存储对象。 |
HashSet在内部使用 HashMap</strong>对象存储对象。 |
当我们不保持唯一性时总是喜欢。 |
当我们需要保持数据的唯一性时使用。 |
{a-> 4,b-> 9,c-> 5} ,其中 a,b,c 是键和 4、9、5 是与键关联的值。 |
{6,43,2,90,4} 表示集合。 |
让我们通过程序理解它们之间的区别。
HashMap示例
在下面的示例中,当我们添加具有相同元素的重复元素时键和其他值,则该键的先前值将被新值替换。
当我们添加具有相同键和相同值的重复元素时,键-值对不会存储第二次。
import java.util.*;
public class HashMapExample
{
public static void main(String args[])
{
HashMap<String, Integer> hm= new HashMap<String, Integer>();
hm.put("John", 23);
hm.put("Monty", 27 );
hm.put("Richard", 21);
hm.put("Devid", 19);
System.out.println("Before adding duplicate keys: ");
System.out.println(hm);
hm.put("Monty", 25);
hm.put("Devid", 19);
System.out.println("After adding duplicate keys: ");
System.out.println(hm);
}
}
输出:
HashSet的示例
在下面的示例中,我们可以看到重复值未存储在HashSet中,并且空值只能存储一次。
import java.util.*;
public class HashSetExample
{
public static void main(String args[])
{
HashSet<String> hs= new HashSet<String>();
hs.add("Java");
hs.add("Python");
hs.add("C++");
hs.add("C");
System.out.println("Before adding duplicate and null values: ");
System.out.println(hs);
hs.add("Python");
hs.add("C");
System.out.println("After adding duplicate values: ");
System.out.println(hs);
hs.add(null);
hs.add(null);
System.out.println("After adding null values: ");
System.out.println(hs);
}
}
输出: