1.是什么
Map 和 Set 是 Java 集合框架中的两个不同接口,它们用于存储不同类型的数据,并具有不同的行为和用途。
Map 接口
- 存储类型 :
Map接口用于存储键值对(key-value pairs),其中键是唯一的,而值可以重复。 - 键值对:每个键值对都有一个键和一个值,键用于查找值。
- 存储顺序 :
Map接口不保证元素的顺序,尽管一些实现类(如TreeMap)会保持元素的排序。 - 键和值 :键和值可以是任何对象,包括
null。 - 操作 :
Map接口提供了丰富的操作,如put(添加键值对)、get(根据键获取值)、remove(根据键删除键值对)等。
Set 接口
- 存储类型 :
Set接口用于存储一组元素,其中元素是唯一的,不允许重复。 - 元素 :
Set接口中的元素可以是任何对象,包括null。 - 存储顺序 :
Set接口不保证元素的顺序,尽管一些实现类(如TreeSet)会保持元素的排序。 - 操作 :
Set接口提供了基本的操作,如add(添加元素)、remove(删除元素)、contains(检查元素是否存在)等。
区别
- 存储类型 :
Map存储键值对,而Set存储单一的元素。 - 键和值 :
Map中的键是唯一的,而值可以重复;Set中的元素都是唯一的。 - 操作 :
Map提供了更多的操作,如put和get,而Set提供了基本的操作,如add和remove。 - 顺序 :虽然
Map和Set接口都不保证元素的顺序,但某些实现类(如TreeMap和TreeSet)会保持元素的排序。
示例
假设我们有一个包含字符串的集合:
java
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.TreeMap;
import java.util.TreeSet;
public class MapSetExample {
public static void main(String[] args) {
// Map 示例
HashMap<String, Integer> hashMap = new HashMap<>();
hashMap.put("Apple", 1);
hashMap.put("Banana", 2);
hashMap.put("Cherry", 3);
// Set 示例
HashSet<String> hashSet = new HashSet<>();
hashSet.add("Apple");
hashSet.add("Banana");
hashSet.add("Cherry");
LinkedHashMap<String, Integer> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("Apple", 1);
linkedHashMap.put("Banana", 2);
linkedHashMap.put("Cherry", 3);
LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add("Apple");
linkedHashSet.add("Banana");
linkedHashSet.add("Cherry");
TreeMap<String, Integer> treeMap = new TreeMap<>();
treeMap.put("Apple", 1);
treeMap.put("Banana", 2);
treeMap.put("Cherry", 3);
TreeSet<String> treeSet = new TreeSet<>();
treeSet.add("Apple");
treeSet.add("Banana");
treeSet.add("Cherry");
}
}
在这个例子中,我们创建了不同类型的 Map 和 Set 实例,并添加了一些元素。由于 Map 和 Set 接口不保证元素的顺序,因此添加元素的顺序可能与打印顺序不同。