来看一下双列集合。我们知道,单列集合就是一次只能添加一个元素:
单列集合:
双列集合一次可以存储两个值:
一、双列集合特点:
1.双列集合一次需要存一对数据,分别为键和值
2.键不能重复,值可以重复
3.键和值是一一对应的,每个键只能找到自己对应的值
4.键+值这个整体我们称之为"键值对"或者"键值对对象",java中成为Entry对象
二、双列集合----Map集合
Map集合:Map集合是双列集合的顶层接口,它的功能是全部双列集合都可以继承使用
常用接口介绍:
方法名称 | 说明 |
V put(K key,V value) | 添加元素 |
V remove(Object key) | 根据键删除元素 |
void clear() | 移除所有的键值对元素 |
boolean containsKey(Object key) | 判断集合是否包含指定的键 |
boolean containsValue(Object value) | 判断集合是否包含指定的值 |
来看其中一个接口put:
public class demo1 {
public static void main(String[] args) {
Map<String,String> map=new HashMap<>();
map.put("杨过","小龙女");
map.put("郭靖","黄蓉");
System.out.println(map.put("杨过","郭靖"));//结果为小龙女
System.out.println(map.put("神雕大侠","郭靖"));//结果为null
}
}
结果:
小龙女
null
可以看到,对于put方法的返回值会有两种不同的结果:
1.当存储的键已经存在时,返回的值就是修改之前的值的值;
2.当存储的键不存在时,返回的值时null.
Map集合的三种遍历方式
1.增强for的方式遍历:(可以通过map集合里面的keySet方法获的键的集合,然后通过map.get(键)去找值)
public class demo1 {
public static void main(String[] args) {
Map<String,String> map=new HashMap<>();
map.put("杨过","小龙女");
map.put("郭靖","黄蓉");
Set<String> key=map.keySet();
for(String keys:key){
System.out.println(map.get(keys));
}
}
}
结果:
小龙女
黄蓉
2.使用Map接口自带的内部接口 Entry<K , V> 过渡方式的遍历。通过调用map
的entrySet()
方法获取一个Set
集合,该集合包含map
中所有键值对的Map.Entry
对象
Set<Map.Entry<K, V>> entrySet();//map内部接口
public class demo2 {
public static void main(String[] args) {
Map<String,String> map=new HashMap<>();
map.put("杨过","小龙女");
map.put("郭靖","黄蓉");
//每个元素都是一个Map.Entry对象,分别对应于map中的每个键值对
Set<Map.Entry<String,String>> entries=map.entrySet();
for(Map.Entry<String,String> entry:entries){
String value=entry.getValue();
String key=entry.getKey();
System.out.println(value+":"+key);
}
}
}
结果:
小龙女:杨过
黄蓉:郭靖
3.lambda表达式遍历以及迭代器遍历:
public class demo2 {
public static void main(String[] args) {
Map<String,String> map=new HashMap<>();
map.put("杨过","小龙女");
map.put("郭靖","黄蓉");
//每个元素都是一个Map.Entry对象,分别对应于map中的每个键值对
Set<Map.Entry<String,String>> entries=map.entrySet();
Iterator<Map.Entry<String,String>> it=entries.iterator();
while(it.hasNext()){
Map.Entry<String,String> mp=it.next();
System.out.println(mp.getKey()+":"+mp.getValue());
}
entries.forEach(stringStringEntry-> {
System.out.println(stringStringEntry.getKey()+":"+stringStringEntry.getValue());
}
);
}
}
结果:
杨过:小龙女
郭靖:黄蓉
杨过:小龙女
郭靖:黄蓉
迭代器的方式就是获取map
中所有键值对的Map.Entry
对象,然后通过getKey()和getValue的方式获得键和值。lambda是遍历的一种新的语法形式,原理也是获得Map.Entry对象,对其进行遍历。