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

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.xdnf.cn/news/12118.html

相关文章:

  • FEMFAT许可分析中的关键指标
  • Java直接内存(directMemory)分配与查看
  • DNS解析深入探讨
  • linux扫描所有私有网段shell脚本
  • 2.MySQL基础:SQL语句
  • 【Python实战】零基础实战教程(三) 变量与数据类型
  • 【Python指南】离线安装顽固复杂的第三方库指南
  • Transformers生成文本:max_new_tokens揭秘
  • 第二十三章 Shell的基础语法
  • haribote原型系统改进方向
  • 【Day44】
  • 【向量化模型如何私有化部署】一文说清原理、流程与最佳实践
  • 软件工程专业本科毕业论文模板
  • 龙虎榜——20250604
  • ‌RF Choke(射频扼流圈)
  • 2D 写实交互数字人:多终端实时交互,引领数字化浪潮
  • 告别延迟,拥抱速度:存储加速仿真应用的解决方案【1】
  • 【五子棋在线对战】二.项目结构设计 实用工具类模板的实现
  • 分享国外几个好用的ai网站
  • 普中STM32F103ZET6开发攻略(五)
  • 李沐《动手学深度学习》 | 数值稳定性
  • CATIA-CAD 拆图
  • 【优秀三方库研读】quill 开源库中的命名空间为什么要用宏封装
  • 养老实训中心建设规划:新时代养老服务人才实践能力提升工程
  • 【算法训练营Day06】哈希表part2
  • java判断一个字符串(如 str1)是否在给定的一组字符串
  • Python×AI:用LangChain快速搭建LLM应用的全栈方案
  • Vite实战指南
  • Linux容器篇、第一章_02Rocky9.5 系统下 Docker 的持久化操作与 Dockerfile 指令详解
  • SD卡通过读取bin文件替代读取图片格式文件来提高LCD显示速度