前言
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的键不可重复,如果存入重复元素如何处理