java Map双列集合

article/2025/8/4 11:10:03

单列集合:一次只能添加一个元素

双列集合:一次添加两个元素,左边的叫键(唯一的不能重复),右边叫值(可以重复),键和值一一对应。这样一对叫:键值对/键值对对象/在Java中叫:Entry

Map常见API

Map是个接口,不能直接new Map,要new其实现类的对象

put方法的细节:有两个作用添加和覆盖

  • 在添加数据的时候,如果键不存在,那么直接把键值对对象添加到map集合当中,返回null。
  • 在添加数据的时候,如果键是存在的,那么会把原有的键值对对象覆盖,并把被覆盖的值进行返回

remove方法:删除后会返回对应的值。

Map遍历方式

三种:键找值、键值对、lambda表达式

键找值

先获取所有的键,放到单列集合里面,再使用get方法,依次获取每个键对应的值

public class A02_MapDemo2 {public static void main(String[] args) {//Map集合的第一种遍历方式//三个课堂练习:////练习一:  利用键找值的方式遍历map集合,要求:装着键的单列集合使用增强for的形式进行遍历//练习二:  利用键找值的方式遍历map集合,要求:装着键的单列集合使用迭代器的形式进行遍历//练习三:  利用键找值的方式遍历map集合,要求:装着键的单列集合使用lambda表达式的形式进行遍历//1.创建Map集合的对象Map<String,String> map = new HashMap<>();//2.添加元素map.put("尹志平","小龙女");map.put("郭靖","穆念慈");map.put("欧阳克","黄蓉");//3.通过键找值//3.1获取所有的键,把这些键放到一个单列集合当中Set<String> keys = map.keySet();//3.2遍历单列集合,得到每一个键for (String key : keys) {//System.out.println(key);//3.3 利用map集合中的键获取对应的值  getString value = map.get(key);System.out.println(key + " = " + value);}}
}

键值对

依次获取map里的键值对,通过get方法再依次获取里面的键和值

package com.itheima.a01mymap;import java.util.HashMap;
import java.util.Map;public class A03_MapDemo3 {public static void main(String[] args) {//Map集合的第二种遍历方式//三个课堂练习:////练习一:  通过键值对对象进行遍历map集合,要求:装着键值对对象的单列集合使用增强for的形式进行遍历//练习二:  通过键值对对象进行遍历map集合,要求:装着键值对对象的单列集合使用迭代器的形式进行遍历//练习三:  通过键值对对象进行遍历map集合,要求:装着键值对对象的单列集合使用lambda的形式进行遍历//1.创建Map集合的对象Map<String, String> map = new HashMap<>();//2.添加元素//键:人物的外号//值:人物的名字map.put("标枪选手", "马超");map.put("人物挂件", "明世隐");map.put("御龙骑士", "尹志平");/* //3.Map集合的第二种遍历方式//通过键值对对象进行遍历//3.1 通过一个方法获取所有的键值对对象,返回一个Set集合Set<Map.Entry<String, String>> entries = map.entrySet();//3.2 遍历entries这个集合,去得到里面的每一个键值对对象for (Map.Entry<String, String> entry : entries) {//entry  --->  "御龙骑士","尹志平"//3.3 利用entry调用get方法获取键和值String key = entry.getKey();String value = entry.getValue();System.out.println(key + "=" + value);}*///3.Map集合的第二种遍历方式//通过键值对对象进行遍历//3.1 通过一个方法获取所有的键值对对象,返回一个Set集合//3.2 遍历entries这个集合,去得到里面的每一个键值对对象for (Map.Entry<String, String> entry :  map.entrySet()) {//entry  --->  "御龙骑士","尹志平"//3.3 利用entry调用get方法获取键和值String key = entry.getKey();String value = entry.getValue();System.out.println(key + "=" + value);}}
}

lambda表达式

package com.itheima.a01mymap;import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;public class A04_MapDemo4 {public static void main(String[] args) {//Map集合的第三种遍历方式//1.创建Map集合的对象Map<String,String> map = new HashMap<>();//2.添加元素//键:人物的名字//值:名人名言map.put("鲁迅","这句话是我说的");map.put("曹操","不可能绝对不可能");map.put("刘备","接着奏乐接着舞");map.put("柯镇恶","看我眼色行事");//3.利用lambda表达式进行遍历//底层://forEach其实就是利用第二种方式进行遍历,依次得到每一个键和值//再调用accept方法map.forEach(new BiConsumer<String, String>() {@Overridepublic void accept(String key, String value) {System.out.println(key + "=" + value);}});System.out.println("-----------------------------------");map.forEach((String key, String value)->{System.out.println(key + "=" + value);});System.out.println("-----------------------------------");map.forEach((key, value)-> System.out.println(key + "=" + value));}
}

HashMap

特点:是Map的实现类。无序,不重复,无索引都是指键。HashMap和HashSet的底层是一样的,都是哈希表结构

创建时,在底层创建一个长度为16,默认加载因子为0.75的数组,再利用put方法就可以添加数据了,put方法底层首先创建一个Entry对象,记录要添加的键和值,利用键计算哈希值(与要添加的值无关),确定要存入的数组索引,存入即可,如果该位置已经有元素,则调用equals方法比较的属性值,如果键里的数据一样,那么覆盖原有的Entry,键不一样则(jdk8以后)则挂在原来元素下面(链表),当链表长度超过8且数组长度>=64,则下面的链表自动转为红黑树。

LinkedHashMap

有序,不重复,无索引指的是键。有序是指:存取元素顺序一致

底层原理:底层数据结构是依然哈希表,只是每个键值对元素又额外的多了一个双链表的机制记录存储的顺序。每添加一个元素在它们之间形成一个双向链表。

TreeMap

TreeMap和TreeSet底层一样的,都是红黑树结构

键:不重复,无索引,可排序(是指对键可排序)默认按照键从小到大排列,也可以自己指定键排序规则。

排序规则实现方法:1实现comparable接口。2创建集合时传递comparator比较器对象


http://www.hkcw.cn/article/EXGUWLqTbZ.shtml

相关文章

在IIS上无法使用PUT等请求

错误来源&#xff1a; chat:1 Access to XMLHttpRequest at http://101.126.139.3:11000/api/receiver/message from origin http://101.126.139.3 has been blocked by CORS policy: No Access-Control-Allow-Origin header is present on the requested resource. 其实我的后…

FastVLM: Efficient Vision Encoding for Vision Language Models——为视觉语言模型提供高效的视觉编码

这篇文章的核心内容是介绍了一种名为 FastVLM 的新型视觉语言模型&#xff08;VLM&#xff09;&#xff0c;它通过一种高效的视觉编码器 FastViTHD&#xff0c;在高分辨率图像输入下实现了显著的性能提升和延迟降低。以下是文章的主要研究内容总结&#xff1a; 1. 研究背景与动…

关于开发板连接电脑找不到CH340解决方法大全(附ch340驱动下载链接)

一、一般开发板只需要一根支持传输数据的usb线就可以&#xff0c;找不到就是驱动没安装&#xff0c;一般win11系统会自动后台安装&#xff0c;如果没安装需要手动 ch340驱动官网&#xff1a;南京沁恒微电子股份有限公司 安装还失败就用这个&#xff08;安装之后重启电脑就可以了…

Flask文件处理全攻略:安全上传下载与异常处理实战

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…

机器学习有监督学习sklearn实战二:六种算法对鸢尾花(Iris)数据集进行分类和特征可视化

本项目代码在个人github链接&#xff1a;https://github.com/KLWU07/Machine-learning-Project-practice 六种分类算法分别为逻辑回归LR、线性判别分析LDA、K近邻KNN、决策树CART、朴素贝叶斯NB、支持向量机SVM。 一、项目代码描述 1.数据准备和分析可视化 加载鸢尾花数据集&…

Vim 支持多种编程语言编辑器

软件简介 Vim是Vi编辑器的增强版&#xff0c;它提供了更多的功能和快捷键。Vim是一款自由软件&#xff0c;它是由Bram Moolenaar在1991年创建的。Vim支持多种编程语言&#xff0c;包括C、C、Java、Python、Perl等等。它是一款轻量级的编辑器&#xff0c;可以快速打开和编辑大型…

CppCon 2014 学习:Unicode in C++

在 Unicode 出现之前&#xff0c;计算机使用各种 单字节编码&#xff08;Single-Byte Encodings&#xff09; 来表示文本。理解这些编码对于学习字符集的演变过程很有帮助&#xff0c;以下是关键点的解释&#xff1a; 什么是单字节编码&#xff08;Single-Byte Encoding&#…

【计算机网络】第3章:传输层—面向连接的传输:TCP

目录 一、PPT 二、总结 TCP&#xff08;传输控制协议&#xff09;详解 1. 概述 核心特性&#xff1a; 2. TCP报文段结构 关键字段说明&#xff1a; 3. TCP连接管理 3.1 三次握手&#xff08;建立连接&#xff09; 3.2 四次挥手&#xff08;终止连接&#xff09; 4. 可…

python打卡 DAY 18 推断聚类后簇的类型

目录 聚类结果分析与簇类型推断学习笔记 一、聚类后分析基础流程 1.1 基本分析步骤 1.2 常用可视化工具 二、簇特征分析方法 2.1 数值型特征分析 簇中心对比 雷达图展示 2.2 类别型特征分析 频数统计 卡方检验 三、簇类型推断技术 3.1 基于统计特征的推断 关键指标…

【RocketMQ 生产者和消费者】- 生产者发送同步、异步、单向消息源码分析(2)

文章目录 1. 前言2. InvokeCallback#operationComplete3. onExceptionImpl 异常处理4. 定时任务扫描 responseTable5. 小结 本文章基于 RocketMQ 4.9.3 1. 前言 【RocketMQ】- 源码系列目录【RocketMQ 生产者消费者】- 同步、异步、单向发送消费消息【RocketMQ 生产者和消费者…

【大模型DA】Unified Language-driven Zero-shot Domain Adaptation

Motivation 本文动机在于解决现有方法对 domain-ID 和多模型的依赖问题&#xff0c;提出一个更实用、更通用的新设定 ULDA&#xff0c;使模型仅通过语言描述就能在不访问目标图像的前提下一次性适应多个未知目标域 这篇文章的方法部分提出了一个统一框架来解决Unified Language…

Tomcat 线程模型详解性能调优

1. Tomcat I/O模型详解**&#xff08;了解&#xff09;** 1.1 Linux I/O模型详解 I/O要解决什么问题 I/O&#xff1a;在计算机内存与外部设备之间拷贝数据的过程。 程序通过CPU向外部设备发出读指令&#xff0c;数据从外部设备拷贝至内存需要一段时间&#xff0c;这段时间CPU就…

Mem0: Building Production-Ready AI Agents with Scalable Long-Term Memory

文章目录 摘要Abstract1. 引言2. Mem03. graph-based Mem0参考总结 摘要 Mem0是一种针对AI智能体的长时记忆架构&#xff0c;旨在解决大型语言模型固定上下文窗口导致的跨会话连贯性问题。其基础版本采用两阶段处理范式&#xff1a;提取阶段通过结合对话摘要、近期消息序列和新…

C++构造函数详解:从基础到高级

文章目录 1. 摘要2. 默认构造函数3. 无参构造函数4. 带参构造函数5. 拷贝构造函数6. 移动构造函数 (C11)7. 委托构造函数 (C11)8. 转换构造函数9. 默认拷贝构造函数10. 总结 1. 摘要 构造函数是C类的重要组成部分&#xff0c;负责对象的初始化工作。本文将详细讲解8种构造函数…

day16 leetcode-hot100-32(链表11)

138. 随机链表的复制 - 力扣&#xff08;LeetCode&#xff09; 1.哈希表 思路 第一次遍历创建新节点并将原节点与新节点同时放入哈希表中 第二次遍历为新节点加入next与random 具体代码 /* // Definition for a Node. class Node {int val;Node next;Node random;public N…

52. N-Queens II

题目描述 52. N-Queens II 回溯法 这道题与第51题是一样的。51. N-Queens-CSDN博客 class Solution {int columns; //从低位到高位起算&#xff0c;第i位为0表示棋盘第i列可以放置皇后&#xff0c;第i位为1表示棋盘第i列不能放置皇后//边长为n的棋盘分别有2n-1条正斜线和反…

关于adb devices无法找到设备:error: device not found 的解决办法

一、此类问题出现的原因&#xff0c;一般是设备所使用的端口被占用&#xff0c;需要找到被占用的端口。 二、操作步骤 1、打开命令窗口。 2、输入adb shell 会发现提示error:device not found&#xff01; 3、输入adb kill-server ,然后启动adb start-server 4、输入 net…

关于不同平台微信多开的解决方案(WIN/MAC/IOS/Andriod)

日常生活跟工作中需要用到多开微信&#xff0c;本次分享下在不同平台上解决微信多开的方法。这些方法我都用了超过1年以上&#xff0c;都比较稳定。中间遇到的一些问题我也有说明&#xff0c;包括每个方法的优缺点&#xff0c;每个平台的操作等。 先说下我自己体验下来的结论&a…

Flutter项目兼容鸿蒙Next系统

一、环境搭建&#xff1a; 1.1 下载鸿蒙DevEco Studio开发工具。 下载地址&#xff1a;下载中心 | 华为开发者联盟-HarmonyOS开发者官网&#xff0c;共建鸿蒙生态 下载之前需要先登录&#xff0c;后面的模拟器创建还要开发者验证、审核啥的&#xff0c;好在审核进度还可以&am…

无需密码强制移除Apple ID 工具! iOS 11.3以下可用 ipad和iphone通用!还不快快收藏起来

无需密码强制移除Apple ID 工具&#xff01; iOS 11.3以下可用 ipad和iphone通用&#xff01;还不快快收藏起来 ✅ 支持的设备范围注意事项使用方法如何下载&#xff1f; 很多朋友在不再使用某个Apple 帐户或是转卖旧的iPhone&#xff0c;为了防止 ID 被盗导致个人信息泄露&…