Map 概述
Map 接口是双列集合的顶层接口是一种由键-值对组成的集合,Map 中每个元素都包含一个键对象和一个值对象,键和值之间存在者映射关系,每个键最多映射一个值。Map 中不允许出现重复的键,但可以出现重复的值。若向 Map 中添加重复键,新的值将会覆盖之前值。Map 体系框架如下:
Map 常用方法
V put(K key, V value) 将指定值与指定键关联(向 Map 对象中添加键对元素)
V remove(Object key) 根据键删除指定键值对元素,并返回所删除键对的值
void clear() 清空集合,清除所有键值对元素
boolean containsKey(Object key) 判断集合是否包含指定的键
boolean containsValue(Object value) 判断集合是否包含指定的值
boolean isEmpty() 判断集合是否为空‘
int size() 返回集合的长度,也即元素个数
V get(Object key) 根据键获取值,若没有该键,返回 null
Set<K> keySet() 获取所有键的集合(因为键唯一,所以返回 Set)
Collection<V> values() 获取所有值的集合(值不要求唯一,所以返回 Collection)
Set<Map.Entry<K, V>> entrySet() 获取所有键值对的集合
HashMap & TreeMap
HashMap 类继承自 AbstractMap 类并实现 Map 接口。HashMap 是元素的无序集合(存储与输出顺序不一致),不允许键重复。每个 HashMap 集合对象允许最多一个键为 null。
TreeMap 类继承自 AbstractMap 类并间接实现 Map 接口(直接实现 NavigableMap 接口)。类似于 TreeSet,TreeMap 也会以一定规则对元素进行排序(自然排序/定制排序),具体排序方式取决于构造器。
Map 的遍历
利用 keySet() & get() 方法
利用 keySet() 获取键的集合,遍历键的集合,用 get() 方法获取对应的值。
public class MapDemo {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("ID001", "Aloys");
map.put("ID002", "Zoey");
map.put("ID003", "Jack");
map.put("ID004", "Rose");
Set<String> set = map.keySet();
for(String s: set) {
System.out.println(s + "=" + map.get(s));
}
}
}
运行结果:
ID001=Aloys
ID002=Zoey
ID003=Jack
ID004=Rose
利用 entrySet() 方法
public class MapDemo {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("ID001", "Aloys");
map.put("ID002", "Zoey");
map.put("ID003", "Jack");
map.put("ID004", "Rose");
Set<Map.Entry<String, String>> set = map.entrySet();
for(Map.Entry<String, String> entry: set) {
System.out.println(entry.getKey() + "=" + entry.getValue());
}
}
}
运行结果:
ID001=Aloys
ID002=Zoey
ID003=Jack
ID004=Rose