HashMap 和 HashSet 是 Java 中两种不同的集合类型,它们的区别在于以下几个方面:
-
数据结构:
- HashMap:基于哈希表实现,使用键值对存储数据,内部通过键的哈希码来确定存储位置,可以包含重复的值,但不允许键重复。
- HashSet:基于哈希表实现,使用哈希集合存储数据,只存储对象的值(没有键值对的概念),不允许重复的值。
-
存储元素:
- HashMap 存储键值对,每个元素都有一个键和一个值。
- HashSet 只存储对象的值,不存储键值对。
-
允许重复:
- HashMap 允许键重复,但不允许值重复。即不同的键可以映射到相同的值,但键必须是唯一的。
- HashSet 不允许重复的值,如果尝试添加一个已经存在的元素,则添加操作会被忽略。
-
操作:
- HashMap 可以通过键来获取值,也可以通过键删除键值对,还可以判断某个键是否存在。
- HashSet 主要用于判断某个元素是否存在集合中,不支持按照索引或键来访问元素。
-
应用场景:
- HashMap 适用于需要键值对存储并且需要根据键快速查找值的情况,例如需要保存一组学生的信息,以学号作为键,以学生对象作为值。
- HashSet 适用于需要存储一组唯一元素并且不需要按照特定顺序访问元素的情况,例如需要保存一组唯一的用户名或邮箱地址。
以下是使用 HashMap 和 HashSet 的简单示例代码:
HashMap 示例:
import java.util.HashMap;
public class HashMapExample {
public static void main(String[] args) {
// 创建一个 HashMap 对象
HashMap<Integer, String> hashMap = new HashMap<>();
// 添加键值对
hashMap.put(1, "Apple");
hashMap.put(2, "Banana");
hashMap.put(3, "Orange");
// 获取值
String value = hashMap.get(2);
System.out.println("Value associated with key 2: " + value);
// 判断是否包含某个键
boolean containsKey = hashMap.containsKey(3);
System.out.println("HashMap contains key 3: " + containsKey);
// 删除键值对
hashMap.remove(1);
System.out.println("HashMap after removing key 1: " + hashMap);
}
}
HashSet 示例:
import java.util.HashSet;
public class HashSetExample {
public static void main(String[] args) {
// 创建一个 HashSet 对象
HashSet<String> hashSet = new HashSet<>();
// 添加元素
hashSet.add("Apple");
hashSet.add("Banana");
hashSet.add("Orange");
// 判断是否包含某个元素
boolean containsElement = hashSet.contains("Banana");
System.out.println("HashSet contains Banana: " + containsElement);
// 删除元素
hashSet.remove("Orange");
System.out.println("HashSet after removing Orange: " + hashSet);
}
}
这些示例代码演示了如何创建、添加元素、获取元素、删除元素以及判断元素是否存在于 HashMap 和 HashSet 中。