当前位置: 首页 > news >正文

JAVA 集合进阶 01 - 05 双列集合

1 双列集合  

  • 双列集合一次需要存一对数据,分别为键和值
  • 键不能重复,值可以重复
  • 键和值是一一对应的,每一个键只能找到自己对应的值
  • 键+值这个整体我们称之为“键值对”或者“键值对对象”,在Java中叫做“Entry对象"

2 双列集合常用 API

Map 是双列集合的顶层接口,它的功能是全部双列集合都可以继承使用的

  • V put(K key,V value)                             添加元素
  • V remove(object key)                            根据键删除键值对元素
  • void clear()                                            移除所有的键值对元素
  • boolean containsKey(object key)          判断集合是否包含指定的键
  • boolean containsValue(object value)    判断集合是否包含指定的值
  • boolean isEmpty()                                 判断集合是否为空
  • int size()                                                 集合的长度,也就是集合中键值对的个数

2.1 例子

package com.bjpowernode.test18;import java.util.HashMap;
import java.util.Map;public class MapDemo1 {public static void main(String[] args) {//创建 Map 集合的对象//Map 是接口,不能直接创建接口的对象,要创建接口实现类的对象,比如 HashMap 类的对象//Map 接口规定了两个泛型,第一个是键,第二个是值Map<String, String> m = new HashMap<>();//添加元素//put 方法的细节://添加 或  覆盖//在添加数据的时候,如果键不存在,那么直接把键值对对象添加到 map 集合中,方法返回 null//在添加数据的时候,如果键存在,那么会把原有的键值对对象覆盖,并且会把被覆盖的值进行返回!!m.put("001","张三");m.put("002","李四");m.put("003","王五");System.out.println(m);    //{001=张三, 002=李四, 003=王五}//删除String result = m.remove("001");System.out.println(result);  //张三System.out.println(m);   //{002=李四, 003=王五}//清空
//        m.clear();
//        System.out.println(m);  //{}//判断键是否存在boolean keyResult = m.containsKey("002");System.out.println(keyResult);   //true//判断集合是否为空boolean empty = m.isEmpty();System.out.println(empty);  //false//集合长度int size = m.size();System.out.println(size);  //2}
}

3 Map 集合遍历方式

3.1 第一种遍历方式:键找值

遍历的写法有三种:增强 for 、 迭代器 、 Lambda 表达式

package com.bjpowernode.test18;import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;public class MapDemo2 {public static void main(String[] args) {//Map 集合的第一种遍历方式//创建 Map 集合的对象Map<String, String> map = new HashMap<>();//添加元素map.put("001", "张三");map.put("002", "李四");map.put("003", "王五");//键找值  遍历// 1 获取所有的键,把这些键放到一个单列集合中Set<String> keys = map.keySet();// 2 遍历单列集合,得到每一个键for (String key : keys) {    //用增强 for 的方式进行遍历//System.out.print(key + "  ");    // 001  002  003// 利用 map 集合中的键获取对应的值  getString value = map.get(key);    //即用键找值System.out.println(key + " = " + value);}//用迭代器遍历集合Iterator<String> iterator = keys.iterator();while (iterator.hasNext()){String key = iterator.next();  //用迭代器获取键String value = map.get(key);    //即用键找值System.out.println(key + " = " + value);}//用 Lambda 表达式map.forEach((key, value) -> {System.out.println(key + " = " + value);});}
}

3.2 第二种遍历方式:键值对

遍历的写法有三种:增强 for 、 迭代器 、 Lambda 表达式

package com.bjpowernode.test18;import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;public class MapDemo3 {public static void main(String[] args) {//创建 Map 集合的对象Map<String, String > map = new HashMap<>();//添加元素map.put("001", "张三");map.put("002", "李四");map.put("003", "王五");//Map 集合的第二种遍历方式,通过键值对// 1 通过一个方法获取所有的键值对对象,返回一个 Set 集合Set<Map.Entry<String, String>> entries = map.entrySet();    // entries 是存放键值对// 2 遍历 entries 这个集合,去得到里边的每一个键值对对象for (Map.Entry<String, String> entry : entries) {           //增强 for// 3 利用 entry 调用 get 方法获取键和值String key = entry.getKey();String value = entry.getValue();System.out.println(key + " = " + value);}// 迭代器遍历Iterator<Map.Entry<String, String>> iterator = entries.iterator();while (iterator.hasNext()){Map.Entry<String, String> next = iterator.next();String key = next.getKey();String value = next.getValue();System.out.println(key + " = " + value);}//Lambda 表达式map.entrySet().forEach(entry -> {System.out.println(entry.getKey() + " = " + entry.getValue());});}
}

3.2 第三种遍历方式:Lambda表达式

3.2.1  利用 Lambda 表达式进行简写匿名内部类

  • 先删除从 new 到 方法名 accept
  • 从最后删除一个 }
  • 在 形参 和 { 之间,加上 ->

3.2.2 还可以继续简化

  • 参数的类型可以省略
  • 如果只有一个参数,那么 () 也可以省略
  • 如果方法体只有一行,那么 {} 、return 、分号  可以省略
package com.bjpowernode.test18;import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;public class MapDemo4 {public static void main(String[] args) {//创建 Map 集合的对象Map<String, String > map = new HashMap<>();//添加元素map.put("001", "张三");map.put("002", "李四");map.put("003", "王五");//先写匿名内部类//new Bi直接回车即可//forEach 底层://forEach其实就是利用第二种方式进行遍历,依次得到每一个键和值//再调用accept方法map.forEach(new BiConsumer<String, String>() {@Overridepublic void accept(String key, String value) {System.out.println(key + " = " + value);}});//利用 Lambda 表达式进行简写匿名内部类// 1 先删除从 new 到 方法名 accept// 2 从最后删除一个 }// 3 在 形参 和 { 之间,加上 ->map.forEach((String key, String value) -> {System.out.println(key + " = " + value);});//还可以继续简化// 1 参数的类型可以省略// 2 如果只有一个参数,那么 () 也可以省略// 3 如果方法体只有一行,那么 {} 、return 、分号  可以省略map.forEach(( key,  value) -> System.out.println(key + " = " + value));}
}

参考链接:

集合进阶-02-Map集合常用的API_哔哩哔哩_bilibili

集合进阶-03-Map集合的第一种遍历方式(键找值)_哔哩哔哩_bilibili

集合进阶-04-Map集合的第二种遍历方式(键值对)_哔哩哔哩_bilibili

集合进阶-05-Map集合的第三种遍历方式(lambda表达式)_哔哩哔哩_bilibili

http://www.lqws.cn/news/133075.html

相关文章:

  • 八:操作系统设备管理之设备驱动程序
  • LangChain4J 使用实践
  • PPTAGENT:让PPT生成更智能
  • Java中的多态
  • Canal
  • A2A MCP 集成
  • 硬路由与软路由
  • GMS地下水数值模拟技术及地下水环评
  • NNLM和word2vec的区别
  • 软件工程专业的本科生应该具备哪些技能
  • 4种常见Python设计爱心创意实现方法
  • ROS中的里程计与IMU的消息类型解读
  • apt-get update提示gpg错误
  • 跨域请求解决方案全解析
  • JAVA-springboot JOSN解析库
  • 基于Web的安全漏洞分析与修复平台设计与实现
  • AT2401C中科微2.4g芯片PA
  • 软件工程专业本科毕业论文模板
  • Vue中的自定义事件
  • 手写 vue 源码 === runtime-dom 实现
  • 第十四章 Java基础-接口
  • CMake入门:3、变量操作 set 和 list
  • 使用TypeScript构建一个最简单的MCP服务器
  • 【docker】Windows安装docker
  • 智慧货运飞船多维度可视化管控系统
  • Kubernetes Pod DNS 配置
  • 2025年计算机科学与网络安全国际会议(CSNS 2025)
  • 关于Dify聊天对话名称无法自动生成的原因和解决方法
  • 区块链跨链通信:使用 Cosmos SDK 实现链间互操作
  • Modbus转EtherNET IP网关开启节能改造新范式