一、Map集合概念和使用
1、Map集合是一种双列集合,每个元素包含两个数据
2、Map集合的每个元素的格式为:Key=value(键值对元素)
3、Map集合也被称为【键值对集合】
Map集合的整体格式
Collection集合的格式:[元素1,元素2,元素3]
Map集合的完整格式:{key=value1,key2=value2,key3=value3,…}
像购物车项目系统会用到
二、Map系列
使用最多的Map集合是HashMap
Map集合体系的特点
1、Map集合的特点都是由键决定的
2、Map集合的键是无序、不重复、无索引、值不做要求(可重复)的
3、Map集合后面重复的键对应的值会覆盖前面重复的键的值
4、Map集合的键值对都可以为null
Map集合实现类的特点
HashMap:元素按照键是无序、不重复、无索引、值不做要求
linkedHashMap:元素按照键是有序、不重复、无索引、值不做要求
TreeMap:元素按照键是排序、不重复、无索引、值不做要求
示例代码
package com.zcl.d3_map;
import java.util.HashMap;
import java.util.linkedHashMap;
import java.util.Map;
import java.util.TreeMap;
// 目标:认识Map体系
public class MapDemo {
public static void main(String[] args) {
// 1、创建一个Map集合对象
Map maps = new HashMap<>(); // 无序、不重复、无索引
// Map maps = new linkedHashMap<>(); // 有序、不重复、无索引 // {鸿星尔克=3, 安踏=5, 耐克=5, java=3, null=null}
maps.put("鸿星尔克",3);
maps.put("安踏",2);
maps.put("耐克",5);
maps.put("java",3);
maps.put("安踏",5); // 覆盖前面的安踏
maps.put(null,null);
System.out.println(maps); // {null=null, java=3, 耐克=5, 鸿星尔克=3, 安踏=5}
}
}
三、Map常用的API
Map是双列集合的祖宗接口,它的功能是全部双利集合都可以继承使用的
示例代码
package com.zcl.map_api;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Demo {
public static void main(String[] args) {
Map maps = new HashMap<>(); // 无序、不重复、无索引
maps.put("苹果",3);
maps.put("黎",2);
maps.put("歪歪",6);
maps.put("鼠标",1);
maps.put("手机",10);
System.out.println(maps);
// 2、清空集合
// maps.clear();
// System.out.println(maps);
// 3、判断集合是否为空,返回true
System.out.println(maps.isEmpty()); // false
// 4、根据键获取对应的值
System.out.println(maps.get("黎")); // 2 没有键取值为null
// 5、根据键删除整个元素,返回删除元素键的值
System.out.println(maps.remove("手机")); // 10
// 6、判断是否包含某个键,包含返回true
System.out.println(maps.containsKey("手机")); // false 上面的代码已经删除了手机
// 7、判断是否包含了某个值
System.out.println(maps.containsValue(3)); // true 苹果
System.out.println(maps.containsValue(6)); // true 歪歪
System.out.println("-------------");
// 8、获取全部键的集合
Set keyS = maps.keySet();
System.out.println(keyS); // [苹果, 鼠标, 歪歪, 黎]
// 9、获取全部值的集合
Collection values = maps.values();
System.out.println(values); // [3, 1, 6, 2]
// 10、获取集合的大小
int size = maps.size();
System.out.println(size); // 4
System.out.println("--------扩展知识-----");
// 11、合并其他的集合(拓展)
Map map1 = new HashMap<>(); // 无序、不重复、无索引
map1.put("java1",10);
map1.put("java2",15);
Map map2 = new HashMap<>(); // 无序、不重复、无索引
map2.put("java2",100);
map2.put("java3",50);
// 把集合2添加到集合1中
map1.putAll(map2);
System.out.println(map1); // {java3=50, java2=100, java1=10}
System.out.println(map2); // {java3=50, java2=100}
}
}
四、Map遍历集合方式一:键找值
1、先获取Map集合的索引键的Set集合
2、遍历键的Set集合,然后通过键获取到对应的值
示例代码
package com.zcl.map_api;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Demo2 {
public static void main(String[] args) {
Map map1 = new HashMap<>(); // 无序、不重复、无索引
map1.put("java1",10);
map1.put("java2",15);
map1.put("java3",65);
map1.put("java4",19);
map1.put("java5",20);
map1.put("java6",89);
System.out.println(map1);
// {java5=20, java4=19, java3=65, java2=15, java6=89, java1=10}
// 获取到所有的键
Set keySet = map1.keySet();
// 遍历每个键
for (String s : keySet) {
System.out.println("key:"+s);
}
}
}
五、Map遍历集合方式二:键找对
1、先把Map集合转换成Set集合,Set集合中每个元素都是键值对实体类型了
2、遍历Set集合,然后提取键以及值
示例代码
package com.zcl.map_api;
import java.security.Key;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Demo3 {
public static void main(String[] args) {
Map map1 = new HashMap<>(); // 无序、不重复、无索引
map1.put("java1",10);
map1.put("java2",15);
map1.put("java3",65);
map1.put("java4",19);
map1.put("java5",20);
map1.put("java6",89);
System.out.println(map1); // {java5=20, java4=19, java3=65, java2=15, java6=89, java1=10}
// 键map集合转换成set集合
Set> entries = map1.entrySet();
// 遍历set集合
for (Map.Entry entry : entries) {
String key = entry.getKey(); // 取键
Integer value = entry.getValue(); // 取值
System.out.println(key+"----->"+value);
}
}
}
六、Map遍历集合方式三:lambda表达式
示例代码
package com.zcl.map_api;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;
public class Demo4 {
public static void main(String[] args) {
Map map1 = new HashMap<>(); // 无序、不重复、无索引
map1.put("java1",10);
map1.put("java2",15);
map1.put("java3",65);
map1.put("java4",19);
map1.put("java5",20);
map1.put("java6",89);
System.out.println(map1); // {java5=20, java4=19, java3=65, java2=15, java6=89, java1=10}
// 简化格式
map1.forEach((key, val) -> System.out.println(key+"---->"+val));
}
}



