目录
前言
Map集合是一种双列集合,每个元素包含两个数据
Map集合的每个元素的格式:Key = value(键值对元素)
Map集合也叫 “键值对集合”
Map集合非常适合做类似于购物车这样的业务场景
一、Map概述
1.Map与collection格式的区别
collection集合的格式:[元素1, 元素2, 元素3..]
Map集合的完整格式:{Key1 = value1, Key2 = value2, Key3 = value3, . . .}
2.Map集合体系
3.Map集合体系的特点
Map的键: 无序、不重复、无索引
Map的值: 可重复
Map集合后面重复的键对应的值会覆盖前面重复键的值
Map集合的键值可以为null
4.Map实现类的特点
编辑
二、实现类
1.Hash Map:
键:无序、不重复、无索引值:不做要求、可重复
public static void main(String[] args) { Map<String,Integer> maps = new HashMap<>(); maps.put("练习本", 2); maps.put("橡皮擦", 2); maps.put("圆珠笔", 4); maps.put("练习本", 5); //覆盖前面的数据 maps.put(null, null); //键值可以为null System.out.println(maps); }
输出:
{null=null, 橡皮擦=2, 练习本=5, 圆珠笔=4}
2.LinkedHashMap:
键:有序、不重复、无索引值:不做要求、可重复
3.TreeMap:
键:排序、不重复、无索引值:不做要求、可重复
可排序:按照键数据的大小默认排序(由小到大)排序,只能对键进行排序
Tree Map集合一定要排序,可以默认排序,也可以将键按照指定规则进行排序
Tree Map跟Tree Set底层原理一样
Tree Map集合自定义排序
1.类实现Comparable接口,重写比较规则
2.集合自定义Comparable比较器对象,重写比较规则
public static void main(String[] args) { Map<Integer, String> names = new TreeMap<>(); names.put(1,"ads"); names.put(3,"gdf"); names.put(2,"eac"); System.out.println(names); }
输出:
{1=ads, 2=eac, 3=gdf}
三、Map集合遍历
遍历方式1:键找值
public static void main(String[] args) { Map<String, Integer> maps = new LinkedHashMap<>(); maps.put("练习本", 2); maps.put("橡皮擦", 2); maps.put("圆珠笔", 4); maps.put("漫画书", 6); maps.put("文件夹", 1); System.out.println(maps); //{练习本=2, 橡皮擦=2, 圆珠笔=4, 漫画书=6, 文件夹=1} //拿到集合的全部键 Set<String> keys = maps.keySet(); //遍历:根据键提取值 for (String key : keys) { int value = maps.get(key); System.out.println(key + ":" + value); /* 输出: 练习本:2 橡皮擦:2 圆珠笔:4 漫画书:6 文件夹:1 */ } }
先获取Map集合的全部键的Set集合
遍历键的set集合,通过键提取对应值
涉及到API
编辑
遍历方式2:Lambda
public static void main(String[] args) { Map<String, Integer> maps = new LinkedHashMap<>(); maps.put("练习本", 2); maps.put("橡皮擦", 2); maps.put("圆珠笔", 4); maps.put("漫画书", 6); maps.put("文件夹", 1); System.out.println(maps); //{练习本=2, 橡皮擦=2, 圆珠笔=4, 漫画书=6, 文件夹=1} //简化前 maps.forEach(new BiConsumer<String, Integer>() { @Override public void accept(String kk, Integer vv) { System.out.println(kk + vv); } }); //简化后 maps.forEach(( k, v) ->{System.out.println(k + v);}); }
maps.forEach(( k, v) ->{System.out.println(k + v);});
总结
Set的元素不可重复,Map的键不可重复,如果存入重复元素如何处理