第十章:详解Set和Map的使用
一、Set 的使用详解
Set
是 Java 中的一个接口,它继承自 Collection
接口。Set
集合不允许存储重复的元素,并且不保证元素的顺序。以下是 Set
接口的一些常用方法和它们的示例:
构造方法
由于 Set
是一个接口,它没有直接的构造方法。但是,Java 提供了几个 Set
接口的实现类,例如 HashSet
、LinkedHashSet
和 TreeSet
,它们都有各自的构造方法。
常用方法
-
add(E e)
:添加一个元素到Set
集合中。Set<Integer> set = new HashSet<>(); boolean added = set.add(1);
-
remove(Object o)
:从Set
集合中移除一个元素。boolean removed = set.remove(1);
-
contains(Object o)
:检查Set
集合是否包含指定的元素。boolean contains = set.contains(1);
-
size()
:返回Set
集合中元素的数量。int size = set.size();
-
isEmpty()
:如果Set
集合为空,则返回true
。boolean empty = set.isEmpty();
-
clear()
:移除Set
集合中的所有元素。set.clear();
-
toArray()
:返回Set
集合中的元素数组。Object[] array = set.toArray();
-
iterator()
:返回一个遍历Set
集合的迭代器。Iterator<Integer> iterator = set.iterator(); while (iterator.hasNext()) { Integer element = iterator.next(); System.out.println(element); }
-
containsAll(Collection<?> c)
:检查Set
集合是否包含指定集合中的所有元素。Set<Integer> anotherSet = new HashSet<>(); anotherSet.add(2); anotherSet.add(3); boolean containsAll = set.containsAll(anotherSet);
-
addAll(Collection<? extends E> c)
:将指定集合中的所有元素添加到Set
集合中。boolean addedAll = set.addAll(anotherSet);
-
retainAll(Collection<?> c)
:仅保留Set
集合和指定集合中都存在的元素。boolean retainedAll = set.retainAll(anotherSet);
-
removeAll(Collection<?> c)
:从Set
集合中移除指定集合中的所有元素。boolean removedAll = set.removeAll(anotherSet);
示例
以下是一个简单的 Set
使用示例:
import java.util.HashSet;
import java.util.Set;
public class SetExample {
public static void main(String[] args) {
Set<Integer> set = new HashSet<>();
// 添加元素
set.add(1);
set.add(2);
set.add(3);
// 检查是否包含元素
boolean contains = set.contains(2);
System.out.println("Does the set contain 2? " + contains);
// 移除元素
boolean removed = set.remove(2);
System.out.println("Was 2 removed? " + removed);
// 获取集合大小
int size = set.size();
System.out.println("The size of the set is: " + size);
// 检查集合是否为空
boolean empty = set.isEmpty();
System.out.println("Is the set empty? " + empty);
// 清空集合
set.clear();
System.out.println("The set is now empty: " + set.isEmpty());
// 使用迭代器遍历集合
Iterator<Integer> iterator = set.iterator();
while (iterator.hasNext()) {
Integer element = iterator.next();
System.out.println(element);
}
}
}
二、Map 的使用详解
Map
是 Java 中的一个接口,它定义了映射数据结构,其中每个键最多只能映射到一个值。Map
提供了键值对的集合,并允许通过键来查找、插入和删除对应的值。以下是 Map
接口的一些常用方法和它们的示例:
常用方法
-
V put(K key, V value)
:将指定的值与此映射中的指定键关联。如果映射之前包含键的映射关系,则返回旧值,否则返回null
。Map<String, Integer> map = new HashMap<>(); Integer oldValue = map.put("key1", 1); // 返回 null,因为 "key1" 是新插入的
-
V get(Object key)
:返回指定键所映射的值。如果映射不包含键的映射关系,则返回null
。Integer value = map.get("key1"); // 返回 1
-
V remove(Object key)
:移除指定键的映射关系(如果存在)。返回键的值。如果没有映射关系,则返回null
。Integer removedValue = map.remove("key1"); // 返回 1,并且 "key1" 被移除
-
int size()
:返回映射中键值对的数量。int size = map.size(); // 返回当前映射中键值对的数量
-
boolean isEmpty()
:如果映射为空,则返回true
。boolean empty = map.isEmpty(); // 检查映射是否为空
-
void clear()
:移除映射中的所有键值对。map.clear(); // 清空映射中的所有键值对
-
boolean containsKey(Object key)
:如果映射包含指定键的映射关系,则返回true
。boolean contains = map.containsKey("key1"); // 检查 "key1" 是否存在于映射中
-
boolean containsValue(Object value)
:如果映射包含一个或多个键的映射值为指定值,则返回true
。boolean contains = map.containsValue(1); // 检查值 1 是否存在于映射中
-
Set<K> keySet()
:返回映射中包含的键的 Set 视图。Set<String> keys = map.keySet(); // 获取所有键的集合
-
Collection<V> values()
:返回映射中包含的值的 Collection 视图。Collection<Integer> values = map.values(); // 获取所有值的集合
-
Set<Map.Entry<K, V>> entrySet()
:返回映射中包含的键值映射关系的 Set 视图。Set<Map.Entry<String, Integer>> entries = map.entrySet(); // 获取所有键值对的集合
-
boolean equals(Object o)
:如果指定的对象与此映射相等(即,它们表示相同的键值映射关系),则返回true
。
示例
以下是一个简单的 Map
使用示例:
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapExample {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
// 添加键值对
map.put("key1", 1);
map.put("key2", 2);
// 获取键对应的值
Integer value = map.get("key1");
System.out.println("The value for 'key1' is: " + value);
// 移除键值对
Integer removedValue = map.remove("key1");
System.out.println("The removed value for 'key1' is: " + removedValue);
// 检查映射是否包含键
boolean containsKey = map.containsKey("key2");
System.out.println("Does the map contain 'key2'? " + containsKey);
// 获取映射的大小
int size = map.size();
System.out.println("The size of the map is: " + size);
// 清空映射
map.clear();
System.out.println("The map is now empty: " + map.isEmpty());
// 获取所有键的集合
Set<String> keys = map.keySet();
System.out.println("The keys in the map are: " + keys);
// 获取所有值的集合
Collection<Integer> values = map.values();
System.out.println("The values in the map are: " + values);
// 获取所有键值对的集合
Set<Map.Entry<String, Integer>> entries = map.entrySet();
System.out.println("The entries in the map are: " + entries);
}
}