一.双列集合的特点:
1.一对一对的添加;
2.元素名称:左 为键 ,右 为值;

3.键和值一一对应;
4.一对键和值称为:键值对 /键值对对象 /Entry;
5.总结:

二.Map集合常用的API:
1.Map集合体系:

2.API:

3.API举例:
注:Map集合是接口(不能实例化,只能创建实现类对象-->不能new Map),
而且存的是一对对象(键和值)-->泛型要写两个


1)put操作:
java
package com.itheima.a01myMap;
import java.util.HashMap;
import java.util.Map;
public class A01_MapDemo1 {
public static void main(String[] args) {
//1.创建Map集合的对象
Map<String,String> m=new HashMap<>();
//2.添加元素
m.put("郭靖","黄蓉");
m.put("韦小宝","沐剑屏");
m.put("尹志平","小龙女");
m.put("韦小宝","双儿");
//3.打印集合
System.out.println(m);
/*运行结果为{韦小宝=双儿, 尹志平=小龙女, 郭靖=黄蓉},
覆盖了韦小宝=沐剑屏*/
}
}
java
package com.itheima.a01myMap;
import java.util.HashMap;
import java.util.Map;
public class A01_MapDemo1 {
public static void main(String[] args) {
//1.创建Map集合的对象
Map<String,String> m=new HashMap<>();
//2.添加元素
/* put方法的细节:
put有添加和覆盖两种情况
1.在添加数据时,如果键不存在,那么直接把键值对对象添加到map集合当中
2.在添加数据时,如果键存在,那么会把原有的键值对对象覆盖,会把被覆盖的值进行返回
*/
m.put("郭靖","黄蓉");
m.put("韦小宝","沐剑屏");
m.put("尹志平","小龙女");
String value = m.put("韦小宝", "双儿");
System.out.println(value);//value的值为沐剑屏(沐剑屏为被覆盖的值)
//3.打印集合
System.out.println(m);
/*运行结果为{韦小宝=双儿, 尹志平=小龙女, 郭靖=黄蓉},
覆盖了韦小宝=沐剑屏*/
}
}
java
package com.itheima.a01myMap;
import java.util.HashMap;
import java.util.Map;
public class A01_MapDemo1 {
public static void main(String[] args) {
//1.创建Map集合的对象
Map<String,String> m=new HashMap<>();
//2.添加元素
/* put方法的细节:
put有添加和覆盖两种情况
1.在添加数据时,如果键不存在,那么直接把键值对对象添加到map集合当中,方法返回null(因为此时只添加,没覆盖数据,所以返回null)
2.在添加数据时,如果键存在,那么会把原有的键值对对象覆盖,会把被覆盖的值进行返回
*/
String value1=m.put("郭靖","黄蓉");
System.out.println(value1);//value1的值为null
m.put("韦小宝","沐剑屏");
m.put("尹志平","小龙女");
String value2 = m.put("韦小宝", "双儿");
System.out.println(value2);//value2的值为沐剑屏(沐剑屏为被覆盖的值)
//3.打印集合
System.out.println(m);
/*运行结果为{韦小宝=双儿, 尹志平=小龙女, 郭靖=黄蓉},
覆盖了韦小宝=沐剑屏*/
}
}
2)删除(remove)操作:
java
package com.itheima.a01myMap;
import java.util.HashMap;
import java.util.Map;
public class A01_MapDemo1 {
public static void main(String[] args) {
//1.创建Map集合的对象
Map<String,String> m=new HashMap<>();
//2.添加元素
m.put("郭靖","黄蓉");
m.put("韦小宝","沐剑屏");
m.put("尹志平","小龙女");
//3.删除操作(注:是根据键删除键值对元素,返回值)
String result = m.remove("郭靖");
System.out.println(result);//运行结果为黄蓉(黄蓉为值)
//4.打印集合
System.out.println(m);//运行结果为{韦小宝=沐剑屏, 尹志平=小龙女}
}
}
3)清空(clear)操作:
java
package com.itheima.a01myMap;
import java.util.HashMap;
import java.util.Map;
public class A01_MapDemo1 {
public static void main(String[] args) {
//1.创建Map集合的对象
Map<String,String> m=new HashMap<>();
//2.添加元素
m.put("郭靖","黄蓉");
m.put("韦小宝","沐剑屏");
m.put("尹志平","小龙女");
//3.清空操作
m.clear();
//4.打印集合
System.out.println(m);//运行结果为{}
}
}
4)判断是否包含键/值:
java
package com.itheima.a01myMap;
import java.util.HashMap;
import java.util.Map;
public class A01_MapDemo1 {
public static void main(String[] args) {
//1.创建Map集合的对象
Map<String,String> m=new HashMap<>();
//2.添加元素
m.put("郭靖","黄蓉");
m.put("韦小宝","沐剑屏");
m.put("尹志平","小龙女");
//3.判断是否包含键/值
boolean keyResult=m.containsKey("郭靖");
System.out.println(keyResult);//运行结果为true,代表存在该键;结果为false代表不存在某个键
boolean valueResult=m.containsValue("小龙女");
System.out.println(valueResult);//运行结果为true,代表存在该值;结果为false代表不存在某个值
//4.打印集合
System.out.println(m);//运行结果为{韦小宝=沐剑屏, 尹志平=小龙女, 郭靖=黄蓉}
}
}
5)判断集合是否为空即方法isEmpty:
java
package com.itheima.a01myMap;
import java.util.HashMap;
import java.util.Map;
public class A01_MapDemo1 {
public static void main(String[] args) {
//1.创建Map集合的对象
Map<String,String> m=new HashMap<>();
//2.添加元素
m.put("郭靖","黄蓉");
m.put("韦小宝","沐剑屏");
m.put("尹志平","小龙女");
//3.判断集合是否为空
boolean result = m.isEmpty();
System.out.println(result);//运行结果为false,代表集合不为空;若运行结果为true,代表集合为空,且长度为0
//4.打印集合
System.out.println(m);//运行结果为{韦小宝=沐剑屏, 尹志平=小龙女, 郭靖=黄蓉}
}
}
6)size方法,用来得出集合长度:
java
package com.itheima.a01myMap;
import java.util.HashMap;
import java.util.Map;
public class A01_MapDemo1 {
public static void main(String[] args) {
//1.创建Map集合的对象
Map<String,String> m=new HashMap<>();
//2.添加元素
m.put("郭靖","黄蓉");
m.put("韦小宝","沐剑屏");
m.put("尹志平","小龙女");
//3.得出集合长度
int size = m.size();
System.out.println(size);//运行结果为3
//4.打印集合
System.out.println(m);//运行结果为{韦小宝=沐剑屏, 尹志平=小龙女, 郭靖=黄蓉}
}
}
三.Map集合的遍历方式:(注:Map集合是无序的)
1.键找值:先获取键,放入单列集合,再遍历该单列集合,通过get方法依次找到对应的值
注:获取键 要用到方法keySet() ,获取值 要用到方法get()
-
图解:
-
代码实现:
javapackage com.itheima.a01myMap; import java.util.HashMap; import java.util.Map; import java.util.Set; public class A02_MapDemo2 { public static void main(String[] args) { //1.创建Map集合的对象 Map<String,String> map=new HashMap<>(); //2.添加元素 map.put("尹志平","小龙女"); map.put("郭靖","穆念慈"); map.put("欧阳克","黄蓉"); //3.通过键找值 //3.1:获取所有的键,把这些键放到一个单列集合当中 Set<String> keys = map.keySet(); //3.2遍历单列集合去得到每一个键(可以用迭代器,增强for,Lambda表达式forEach) for (String key : keys) { System.out.println(key); //3.3利用Map集合中的键获取对应的值 String value=map.get(key); System.out.println(key+"="+value); } } }
运行结果:
2.依次获取键值对对象(又叫Entry对象):getKey()方法获取键,getValue()方法获取值
通过一个方法(entrySet())获取所有的键值对对象,返回一个Set集合
entrySet()方法:

java
package com.itheima.a01myMap;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class A03_MapDemo3 {
public static void main(String[] args) {
//1.创建Map集合的对象
Map<String,String> map=new HashMap<>();
//2.添加元素
//键:人物的外号;值:人物的名字
map.put("标枪选手","马超");
map.put("人物挂件","明世隐");
map.put("御龙骑士","尹志平");
//3.通过键值对对象进行遍历集合
//3.1 通过一个方法(entrySet())获取所有的键值对对象,返回一个Set集合(Set集合里装着所有键值对对象)
/* Set<Map.Entry<String, String>> entries = map.entrySet();可以
先打出map.entrySet(),再ctrl+alt+v快速生成;
Entry为Map接口里的内部接口-->所以要Map.Entry
*/
Set<Map.Entry<String, String>> entries = map.entrySet();
/*Set<Entry<String, String>> entries = map.entrySet();也行,
但上方需要一个导包import java.util.Map.Entry;
*/
//3.2 遍历entries这个集合,去得到里面的每一个键值对对象
for (Map.Entry<String, String> entry : entries) {
//3.3 利用entry调用get方法获取键和值
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key+"="+value);
}
}
}
运行结果:

3.Lambda表达式:
-
方法:forEach方法,底层就是利用第二种方式进行遍历,依次得到每一个键和值
BiConsumer为函数式接口,所以可改用Lambda表达式
-
代码实现:
javapackage com.itheima.a01myMap; import java.util.HashMap; import java.util.Map; import java.util.function.BiConsumer; public class A04_MapDemo4 { public static void main(String[] args) { //1.创建Map集合的对象 Map<String,String> map=new HashMap<>(); //2.添加元素 //键:人物的名字;值:名人名言 map.put("鲁迅","这句话是我说的"); map.put("曹操","不可能绝对不可能"); map.put("刘备","接着奏乐接着舞"); map.put("柯镇恶","看我眼色行事"); //3.利用Lambda表达式进行遍历 map.forEach(new BiConsumer<String, String>() { @Override public void accept(String key, String value) { System.out.println(key+"="+value); } }); } }
改为Lambda表达式:
javapackage com.itheima.a01myMap; import java.util.HashMap; import java.util.Map; public class A04_MapDemo4 { public static void main(String[] args) { //1.创建Map集合的对象 Map<String,String> map=new HashMap<>(); //2.添加元素 //键:人物的名字;值:名人名言 map.put("鲁迅","这句话是我说的"); map.put("曹操","不可能绝对不可能"); map.put("刘备","接着奏乐接着舞"); map.put("柯镇恶","看我眼色行事"); //3.利用Lambda表达式进行遍历 map.forEach( (key,value) -> System.out.println(key+"="+value) ); } }
运行结果为: