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>() {@Overridepublic 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集合来判断用户名是否已经被注册。