Map常见子类
«interface»
Map
«abstract»
AbstractMap
«interface»
SortedMap
«Class»
HashMap
«Class»
LinkedHashMap
«Class»
Hashtable
«Class»
TreeMap
Map集合存储元素是成对出现的,Map集合的键是唯一的,每个键最多只能映射到一个值。 不同键映射的值是可重复的。
注意:Map集合的数据结构是针对键有效,跟值无关。而Collection集合的数据结构是针对元素有效。
Map集合的功能概述
- 1: 添加功能
- V
put
(K key, V value):添加元素。
- 如果键是第一次存储,就直接存储元素,返回null;
- 如果键不是第一次存储,就用值把以前的值替换掉,返回以前的值。
- 2: 删除功能
- void
clear()
:移除所有的键值对元素。 - V
remove
(Object key):根据键删除键值对元素,并把值返回。
- 3: 判断功能
- boolean
containsKey
(Object key):判断集合是否包含指定的键 - boolean
containsValue
(Object value):判断集合是否包含指定的值 - boolean
isEmpty()
:判断集合是否为空
- 4: 获取功能
- Set<K>
keySet()
:获取集合中所有键的集合 - V
get
(Object key):根据键获取值 - Set<Map.Entry<K,V>>
entrySet()
:获取所有键值对对象的集合 - Collection<V>
values()
:获取集合中所有值的集合
- 5: 长度功能
- int
size()
:返回集合中的键值对的总数
public class MapDemo {
public static void main(String[] args) {
// 创建集合对象
Map<String, String> map = new HashMap<String, String>();
// 添加元素
System.out.println("put:" + map.put("文章", "马伊俐"));
System.out.println("put:" + map.put("文章", "姚笛"));
System.out.println("map=" + map);
map.put("杨过", "小龙女");
map.put("李雷", "韩梅梅");
map.put("吕布", "貂蝉");
System.out.println("map=" + map);
// void clear():移除所有的键值对元素
//map.clear();
//System.out.println("map=" + map);
// V remove(Object key):根据键删除键值对元素,并把值返回
System.out.println("remove:" + map.remove("杨过"));
System.out.println("remove:" + map.remove("郭靖"));
System.out.println("map:" + map);
// boolean containsKey(Object key):判断集合是否包含指定的键
System.out.println("containsKey:" + map.containsKey("杨过"));
System.out.println("containsKey:" + map.containsKey("李雷"));
// boolean isEmpty():判断集合是否为空
System.out.println("isEmpty:"+map.isEmpty());
//int size():返回集合中的键值对的对数
System.out.println("size:"+ map.size());
}
}
输出:
put:null
put:马伊俐
map={文章=姚笛}
map={杨过=小龙女, 李雷=韩梅梅, 吕布=貂蝉, 文章=姚笛}
remove:小龙女
remove:null
map:{李雷=韩梅梅, 吕布=貂蝉, 文章=姚笛}
containsKey:false
containsKey:true
isEmpty:false
size:3
代码第8行,返回“马伊俐”。put()
不仅可以添加元素,如果键值存在,会修改原先键值映射的值,并返回以前的值。
遍历功能
- for循环遍历keySet
- keySet迭代器遍历map
- for循环遍历entrySet
- entrySet()迭代器遍历map
public class MapDemo2 {
public static void main(String[] args) {
Map<String,String> map = new HashMap<String,String>();
map.put("杨过", "小龙女");
map.put("李雷", "韩梅梅");
map.put("吕布", "貂蝉");
/* 方法一:for循环遍历keySet*/
Set<String> keySet = map.keySet();
for(String key : keySet){
System.out.println("key="+ key + ",value="+ map.get(key));
}
/* 方法二:keySet迭代器遍历map*/
Iterator<String> iterator = map.keySet().iterator();
while (iterator.hasNext()){
String key = iterator.next();
System.out.println("key="+ key + ",value="+ map.get(key));
}
/* 方法三:for循环遍历entrySet*/
Set<Map.Entry<String, String>> entrySet = map.entrySet();
for(Map.Entry<String, String> entry : entrySet){
System.out.println("key="+ entry.getKey() + ",value="+ entry.getValue());
}
/* 方法四:entrySet()迭代器遍历map*/
Set<Map.Entry<String, String>> entrySet2 = map.entrySet();
Iterator<Map.Entry<String, String>> iterator2 = entrySet2.iterator();
while(iterator2.hasNext()){
Map.Entry<String, String> next = iterator2.next();
System.out.println(next.getKey()+"=="+next.getValue());
}
Collection<String> values = map.values();
for(String value : values){
System.out.println(value);
}
}
}
输出:
key=杨过,value=小龙女
key=李雷,value=韩梅梅
key=吕布,value=貂蝉
...
小龙女
韩梅梅
貂蝉
Entry<K,V>
是 Map 的一个内部接口。
所以 Map.Entry<K,V> 是一个类型。调用entrySet()
返回一个 Set 集合,此集合的类型为Map.Entry
。通过接口中有getKey()
、getValue()
方法获取键值。
总结
Map 存储一对数据,而 Collection 存储一列数据。