目录
1、 方法
package com.csdn; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Set; public class MapDemo { public static void main(String[] args) { //1、添加元素:无序,不重复,无索引 Map<String, Integer> maps = new HashMap<>(); maps.put("张三丰", 80); maps.put("张翠山", 40); maps.put("张无忌", 20); maps.put("赵敏", 18); System.out.println(maps);//{张翠山=40, 张三丰=80, 赵敏=18, 张无忌=20} //2、清空集合 maps.clear(); System.out.println(maps);//{} //3、判断集合是否为空,为空返回true,反之! System.out.println(maps.isEmpty());//true //4、根据键获取对应值:public V get(Object key) System.out.println(maps.get("张三丰"));//null //5、根据键删除整个元素。(删除键会返回键的值) System.out.println(maps.remove("张三丰"));//null //6、判断是否包含某个键,包含返回true,反之 System.out.println(maps.containsKey("张三丰"));//false //7、判断是否包含某个值 System.out.println(maps.containsValue(80));//false //8、获取全部键的集合:public Set<K> keySet() Set<String> keys = maps.keySet(); System.out.println(keys);//[] //9、获取全部值的集合:Collection(V) values(); Collection<Integer> values = maps.values(); System.out.println(values);//[] //10、集合的大小 System.out.println(maps.size());//0 //11、合并其他Map集合。(拓展) Map<String, String> map1 = new HashMap<>(); map1.put("灰太狼", "抓羊"); map1.put("红太狼", "奖励灰太狼"); Map<String, String> map2 = new HashMap<>(); map2.put("灰太狼", "不抓羊"); map2.put("红太狼", "打灰太狼"); map2.put("小灰灰", "放羊"); map1.putAll(map2); System.out.println(map1);//{红太狼=打灰太狼, 灰太狼=不抓羊, 小灰灰=放羊} System.out.println(map2);//{红太狼=打灰太狼, 灰太狼=不抓羊, 小灰灰=放羊} } }
2、Map集合的遍历方式
2.1、键找值
package com.csdn; import java.util.HashMap; import java.util.Map; import java.util.Set; public class MapEach { public static void main(String[] args) { //1、添加元素:无序,不重复,无索引 Map<String, Integer> maps = new HashMap<>(); maps.put("张三丰", 80); maps.put("张翠山", 40); maps.put("张无忌", 20); maps.put("赵敏", 18); System.out.println(maps);//{张翠山=40, 张三丰=80, 赵敏=18, 张无忌=20} //1、键找值:第一步:先拿到集合的全部键 Set<String> keys = maps.keySet(); //2、第二步:遍历每个键,根据键提取值 for (String key : keys) { Integer value = maps.get(key); System.out.println(key + "===>" + value); //张翠山===>40 //张三丰===>80 //赵敏===>18 //张无忌===>20 } } }
2.2、键值对
package com.csdn; import java.util.HashMap; import java.util.Map; import java.util.Set; public class MapEach { public static void main(String[] args) { //1、添加元素:无序,不重复,无索引 Map<String, Integer> maps = new HashMap<>(); maps.put("张三丰", 80); maps.put("张翠山", 40); maps.put("张无忌", 20); maps.put("赵敏", 18); System.out.println(maps);//{张翠山=40, 张三丰=80, 赵敏=18, 张无忌=20} //1、把Map集合转化成Set集合 Set<Map.Entry<String, Integer>> entries = maps.entrySet(); //2、开始遍历 for (Map.Entry<String, Integer> entry : entries) { String key = entry.getKey(); Integer value = entry.getValue(); System.out.println(key+"===>"+value); //张翠山===>40 //张三丰===>80 //赵敏===>18 //张无忌===>20 } } }
2.3、Lambda表达式遍历
package com.csdn; import java.util.HashMap; import java.util.Map; public class MapEach { public static void main(String[] args) { //1、添加元素:无序,不重复,无索引 Map<String, Integer> maps = new HashMap<>(); maps.put("张三丰", 80); maps.put("张翠山", 40); maps.put("张无忌", 20); maps.put("赵敏", 18); System.out.println(maps);//{张翠山=40, 张三丰=80, 赵敏=18, 张无忌=20} /* maps.forEach(new BiConsumer<String, Integer>() { @Override public void accept(String s, Integer integer) { System.out.println(s + "===>" + integer); } }); */ maps.forEach((key, value) -> System.out.println(key + "===>" + value)); //张翠山===>40 //张三丰===>80 //赵敏===>18 //张无忌===>20 } }
2.4、方法引用遍历
package com.csdn; import java.util.HashMap; import java.util.Map; import java.util.Set; public class MapEach { public static void main(String[] args) { //1、添加元素:无序,不重复,无索引 Map<String, Integer> maps = new HashMap<>(); maps.put("张三丰", 80); maps.put("张翠山", 40); maps.put("张无忌", 20); maps.put("赵敏", 18); System.out.println(maps);//{张翠山=40, 张三丰=80, 赵敏=18, 张无忌=20} Set<Map.Entry<String, Integer>> entries = maps.entrySet(); entries.forEach(System.out::println); //张翠山=40 //张三丰=80 //赵敏=18 //张无忌=20 } }
2.5、stream流遍历方式
package com.csdn; import java.util.HashMap; import java.util.Map; import java.util.Set; public class MapEach { public static void main(String[] args) { //1、添加元素:无序,不重复,无索引 Map<String, Integer> maps = new HashMap<>(); maps.put("张三丰", 80); maps.put("张翠山", 40); maps.put("张无忌", 20); maps.put("赵敏", 18); System.out.println(maps);//{张翠山=40, 张三丰=80, 赵敏=18, 张无忌=20} Set<Map.Entry<String, Integer>> entries = maps.entrySet(); entries.stream().forEach(System.out::println); //张翠山=40 //张三丰=80 //赵敏=18 //张无忌=20 } }
Map集合的应用有很多,以下是一些常见的应用场景:
统计词频:将文本中出现的单词作为Key,出现次数作为Value存储在Map集合中,可以方便地统计每个单词在文本中出现的次数。
存储配置信息:将配置文件中的配置项和对应的配置值存储在Map集合中,可以方便地读取和修改配置信息。
缓存数据:将经常使用的数据存储在Map集合中,可以提高程序的运行效率,避免频繁访问数据库或文件系统。
保存用户信息:将用户ID作为Key,用户信息作为Value存储在Map集合中,可以实现对用户信息的快速访问和修改。
实现图结构:使用Map集合可以方便地实现图结构,其中Key表示图中的节点,Value表示与该节点相邻的节点和边的属性。
实现缓存一致性:在分布式系统中,使用Map集合可以方便地实现缓存一致性,其中不同节点上的Map集合存储相同的缓存数据,通过协调不同节点上的更新操作可以保证缓存数据的一致性。
Map集合的应用有以下几个方面:
存储键值对:Map集合可以存储键值对,其中键和值都可以是任意数据类型,键值对之间是一一对应的关系。可以通过遍历Map集合,获取键值对的值,实现对数据的访问和操作。
数据去重:Map集合的键具有唯一性,因此可以利用这个特点进行数据去重操作。例如,在处理用户提交的表单数据时,可以使用Map集合来存储用户提交的数据,然后根据键值对的唯一性,进行去重操作。
统计数据:Map集合可以存储不同的数据值,并统计每个数据值出现的次数。例如,在统计某个文本中每个单词出现的次数时,可以使用Map集合来存储每个单词出现的次数。
缓存数据:Map集合可以用来缓存数据,提高数据访问的效率。例如,在Web开发中,可以使用Map集合来缓存一些经常使用的数据,减少对数据库的访问次数,提高系统的性能。
实现自定义数据类型的映射:Map集合中的键和值可以是任意对象,因此可以通过Map集合来实现自定义数据类型的映射。例如,在处理图形界面中的控件时,可以使用Map集合来实现控件的名称和控件对象之间的映射关系。
Map集合是一种键值对(key-value)的数据结构,常用于存储和操作一些映射关系。下面是一些Map集合的应用:
数据库操作:将表中的数据以Map集合的形式存放,便于进行查询、更新等操作。
缓存管理:常见的缓存管理工具如Redis等都使用Map集合来存储缓存数据,方便进行查询和删除。
配置文件读取:将配置文件中的键值对转换为Map集合,方便读取和使用。
数据统计与分析:将数据按照不同的维度进行分类,以Map集合的形式存储,方便进行统计和分析。
索引管理:在搜索引擎等场景中,Map集合可以用来存储关键词和对应的文档ID,以便快速检索。
Web应用开发:常见的Web框架如Spring、Struts2等都会使用Map集合来存储请求参数、Session数据等。
图像处理:在一些图像处理工具中,Map集合可以用来存储像素点的坐标和颜色等信息。
Map集合的应用包括:
存储数据:Map集合可以用来存储大量的数据,可以用于缓存数据、存储配置信息等。
统计数据:Map集合可以用来统计数据,例如在某个地区统计人口数、统计某个商品的销售量等。
分类数据:Map集合可以用来分类数据,例如将学生按照班级、年级进行分类。
查找数据:Map集合可以用来查找数据,例如在一个学生集合中查找某个学生的信息。
记录数据:Map集合可以用来记录数据,例如记录一个学生的出勤情况、记录某个用户的登录情况等。
维护关系:Map集合可以用来维护关系,例如维护一个每个员工的上级关系、维护客户和订单之间的关系等。
唯一性处理:Map集合可以用来处理数据的唯一性,例如在一个用户注册系统中,可以使用Map集合来判断用户名是否已经被注册。