JavaSE - 集合类-双列集合框架
本节学习目标:
- Java双列集合框架结构;
- 了解并掌握Map接口及其方法;
- 了解并掌握Map的实现类及其方法;
- 了解并掌握双列集合实现类的特性和优缺点。
1. 双列集合框架结构
双列集合指有两列数据的集合,双列集合中的每个数据被称为键值对(Entry)。
键值对由两个数据组成:
- 键(Key):使用泛型
K
限制数据类型,键不可重复(唯一),数据结构也只对键有效; - 值(Value):使用泛型
V
限制数据类型,值可以重复。
Java双列集合框架由Map
接口及其多种实现类构成:
2. Map 接口
Map
接口为Java双列集合框架中的根接口,它预先定义了双列集合中的基本方法,双列集合中的常用方法如下:
方法 | 返回值类型 | 功能 |
---|---|---|
size() |
int |
返回Map集合中的键值对数量 |
isEmpty() |
boolean |
返回Map集合是否为空 |
containsKey(Object key) |
boolean |
返回Map集合中是否存在指定键 |
containsValue(Object value) |
boolean |
返回Map集合中是否存在指定值 |
get(Object key) |
V |
返回Map集合中指定键的值 |
put(K key, V value) |
V |
向Map集合中添加指定键值对,并返回旧值(如果没有该键的映射则返回null ) |
remove(Object key) |
V |
移除Map集合中的指定键,并返回此键的值 |
putAll(Map<? extends K, ? extends V> m) |
void |
将指定Map集合的所有键值对添加至当前Map集合中 |
keySet() |
Set<K> |
以Set集合形式返回Map集合的所有键 |
values() |
Collection<V> |
以Collection集合形式返回Map集合的所有值 |
entrySet() |
Set<Entry<K, V>> |
以Set集合形式返回Map集合的所有键值对 |
remove(Object key, Object value) |
boolean |
当指定键对应指定值时,移除此键值对,返回是否移除成功 |
replace(K key, V oldValue, V newValue) |
boolean |
当键key 对应值oldValue 时,将值替换为newValue ,返回是否替换成功 |
replace(K key, V value) |
V |
将指定键的值替换为指定值,并返回旧值(如果没有该键的映射则返回null ) |
clear() |
void |
移除Map集合中的所有键值对 |
Entry
接口为Map
接口中的内部接口,它预先定义了双列集合中键值对的基本方法,键值对的常用方法如下:
方法 | 返回值类型 | 功能 |
---|---|---|
getKey() |
K |
返回当前键值对的键 |
getValue() |
V |
返回当前键值对的值 |
setValue(V value) |
V |
将当前键值对的值替换为指定值,并返回旧值 |
编写代码进行测试:
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<>();
System.out.println("集合是否为空:" + map.isEmpty());
map.put(1, "A");
map.put(2, "A");
map.put(3, "C");
System.out.println("集合当前键值对:" + Arrays.toString(map.entrySet().toArray()));
System.out.println("集合中键值对数量:" + map.size());
System.out.println("集合中是否存在键2:" + map.containsKey(2));
System.out.println("集合中是否存在值D:" + map.containsValue("D"));
System.out.println("获取集合中键1的值:" + map.get(1));
map.remove(1);
System.out.println("移除集合中键为1的键值对:" + Arrays.toString(map.entrySet().toArray()));
map.putAll(Collections.singletonMap(4, "D"));
System.out.println("向集合中添加Map集合[4=D]:" + Arrays.toString(map.entrySet().toArray()));
System.out.println("获取集合中的所有键:" + Arrays.toString(map.keySet().toArray()));
System.out.println("获取集合中的所有值:" + Arrays.toString(map.values().toArray()));
map.remove(2, "B");
System.out.println("移除集合中键值对2=B:" + Arrays.toString(map.entrySet().toArray()));
map.replace(2, "A", "B");
System.out.println("将集合中键值对2=A的值替换为B:" + Arrays.<