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

Java集合学习之Map

1.什么是Map

Java里的Map接口是一个集合根接口,表示一个 键值对(Key-Value) 的映射。

简单来说就是键和值是一对的,每一个 Key都有唯一确定的 Value对应。

其中要求 键(Key) 唯一,因为是按照Key去找Value的,如果Key重复,就找不到应该是对应的哪一个Value。

举一个简单的例子就是,每一个学号对应一位学生,那学号与学生姓名就是一对键值对,学号为键,学生为值,学号不能重复,学生姓名可以重复。

因此,Map最重要的特性就是去重,Set底层使用的就是Map集合。

2.Java中的Map

Java中的Map集合是和Collection接口同一等级的集合根接口。
Java集合

2.1 Java中的Map接口

Map 的三个 collection 视图

可以从 Keyset, Values, Entry三个角度来分析Java中的Map接口。

2.1.1 Keyset

KeySet 是一个 Map 中键(key)的集合,以 Set 的形式保存,不允许重复,因此键存储的对象需要重写 equals() 和 hashCode() 方法。

在上图就是保存 AA, BB, CC, DD… 等键的集合,也就是左边的那一列。

可以通过 Map.keySet() 方法获得。

2.1.2 Values

Values 是一个 Map 中值 (value) 的集合,以 Collection 的形式保存,因此可以重复。

在上图就是保存 90,90,56,78… 等值的集合,也就是右边那一列。

通过 Map.values() 方法获得。

2.1.3 Entry

Entry 是 Map 接口中的静态内部接口,表示一个键值对的映射,例如上图中 AA-90 这一组映射关系。

Entry

Entry 具有上图中的方法:

  • getKey() , 获取这组映射中的键 key
  • getValue() , 获取这组映射中的值 value
  • setValue() ,修改这组映射中的值
  • hashCode() , 返回这个 Entry 的哈希值
  • equals() , 对比 key-value 是否相等

通过 Map.entrySet() 方法获得的是一组 Entry 的集合,保存在 Set 中,所以 Map 中的 Entry 也不能重复。

public Set<Map.Entry<K,V>> entrySet();

3.Map 的实现类

Map体系的继承树
Map 的实现类主要有 4 种:

  • Hashtable
    • 古老,线程安全
  • HashMap
    • 速度很快,但没有顺序
  • TreeMap
    • 有序的,效率比 HashMap 低
  • LinkedHashMap
    • 结合 HashMap 和 TreeMap 的有点,有序的同时效率也不错,仅比 HashMap 慢一点

其中后三个的区别很类似 Set 的实现类:

  • HashSet
  • TreeSet
  • LinkedHashSet
    Map 的每个实现类都应该实现 2 个构造方法:
  1. 无参构造方法,用于创建一个空的 map
  2. 参数是 Map 的构造方法,用于创建一个包含参数内容的新 map

第二种构造方法允许我们复制一个 map。

虽然没有强制要求,但自定义 Map 实现类时最好都这样来。

参考链接

Java 集合深入理解(14):Map 概述

【Java】Map介绍和使用

Java :集合(4)——Map 用法详解

相关文章:

Java集合学习之Map

1.什么是Map Java里的Map接口是一个集合根接口&#xff0c;表示一个 键值对&#xff08;Key-Value&#xff09; 的映射。 简单来说就是键和值是一对的&#xff0c;每一个 Key都有唯一确定的 Value对应。 其中要求 键&#xff08;Key&#xff09; 唯一&#xff0c;因为是按照…...

java 基于maven多模块合并打包部署

项目环境 jdk 1.8spring 2.7.xmaven 3.6 项目结构 模块功能 client – 对外service common – 共用工具切面等 main – 启动类 goods – 子模块具体实现 模块间依赖关系 client – 无依赖 common – 无依赖 main – client、common、goods goods – client、common 具体P…...

Kubernetes是个什么东东?

Kubernetes 是一个可移植、可扩展的开源平台&#xff0c;用于管理容器化的工作负载和服务&#xff0c;可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态&#xff0c;其服务、支持和工具的使用范围相当广泛。 Kubernetes 这个名字源于希腊语&#xff0c;意…...

【go语言grpc之client端源码分析三】

go语言grpc之server端源码分析三newClientStreamnewAttemptLocked上一篇在介绍了grpc.Dial之后&#xff0c;然后再介绍一下后面的 //创建RPC客户端client : pb.NewGreetsClient(conn)//设置超时时间_, cancel : context.WithTimeout(context.Background(), time.Second)defer c…...

Android 基础知识4-2.6LinearLayout(线性布局)

一、LinearLayout的概述 线性布局&#xff08;LinearLayout&#xff09;主要以水平或垂直方式来排列界面中的控件。并将控件排列到一条直线上。在线性布局中&#xff0c;如果水平排列&#xff0c;垂直方向上只能放一个控件&#xff0c;如果垂直排列&#xff0c;水平方向上也只能…...

补充前端面试题(三)

图片懒加载<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, in…...

.net开发安卓入门-自动升级(配合.net6 webapi 作为服务端)

文章目录思路客户端权限清单&#xff08;AndroidManifest.xml&#xff09;权限列表(完整内容看 权限清单&#xff08;AndroidManifest.xml&#xff09;&#xff09;打开外部应用的权限(完整内容看 权限清单&#xff08;AndroidManifest.xml&#xff09;&#xff09;添加文件如下…...

分享111个HTML艺术时尚模板,总有一款适合您

分享111个HTML艺术时尚模板&#xff0c;总有一款适合您 111个HTML艺术时尚模板下载链接&#xff1a;https://pan.baidu.com/s/1sYo2IPma4rzeku3yCG7jGw?pwdk8dx 提取码&#xff1a;k8dx Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 时尚理发沙龙服务网站模…...

spring之Spring AOP基于注解

文章目录前言一、Spring AOP基于注解的所有通知类型1、前置通知2、后置通知3、环绕通知4、最终通知5、异常通知二、Spring AOP基于注解之切面顺序三、Spring AOP基于注解之通用切点三、Spring AOP基于注解之连接点四、Spring AOP基于注解之全注解开发前言 通知类型包括&#x…...

LeetCode题目笔记——6362. 合并两个二维数组 - 求和法

文章目录题目描述题目链接题目难度——简单方法一&#xff1a;常规双指针遍历代码/Python方法二&#xff1a;字典\哈希表代码/Python总结题目描述 给你两个 二维 整数数组 nums1 和 nums2. nums1[i] [idi, vali] 表示编号为 idi 的数字对应的值等于 vali 。nums2[i] [idi, …...

【C#基础】C# 常用语句讲解

序号系列文章3【C#基础】C# 数据类型总结4【C#基础】C# 变量和常量的使用5【C#基础】C# 运算符总结文章目录前言语句概念1&#xff0c;迭代语句1.1 for 语句1.2 foreach 语句1.3 while 语句1.4 do 语句2&#xff0c;选择语句2.1&#xff0c;if 语句2.2&#xff0c;else 语句2.3…...

腾讯云——负载均衡CLB

负载均衡 CLB 提供四层&#xff08;TCP 协议/UDP 协议/TCP SSL 协议&#xff09;和七层&#xff08;HTTP 协议/HTTPS 协议&#xff09;负载均衡。您可以通过 CLB 将业务流量分发到多个后端服务器上&#xff0c;消除单点故障并保障业务可用性。CLB 自身采用集群部署&#xff0c;…...

6.关于系统服务的思考—— native vs java

文章目录native服务 以sensor service为例Native 服务java 服务&#xff0c; 以vibrate为例java 服务 以一个demo为例native服务 以sensor service为例 service启动 SystemServer.startBootstrapServices---->>>mSystemServiceManager.startService—>>>Sen…...

SQL语句创建视图:

前言 &#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏: &#x1f354;&#x1f35f;&#x1f32f; c语言初阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f349;本篇简介:>:介绍数据库中有关视图的知识,参考学校作业. 金句分享:…...

使用BP神经网络和Elman Net预测航班价格(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密…...

JavaWeb9-volatile解决内存可见性和指令重排序问题

目录 1.解决内存可见性问题 2.解决指令重排序问题 3.volatile缺点 4.特使使用场景 volatile&#xff08;易变的&#xff0c;易挥发的&#xff0c;不稳定的&#xff09;可以解决内存可见性和指令重排序的问题。 1.解决内存可见性问题 代码在写入 volatile 修饰的变量时&am…...

Docker - 镜像操作命令

镜像名称一般分为两部分组成:[repository]:[tag]在没有指定tag时&#xff0c;默认是latest&#xff0c;代表最新版本的镜像1.下载docker镜像 docker pull repository:tag2.查看本地所有镜像 docker images3.创建镜像别名 docker tag repository:tag repository111:tag4.查看镜像…...

全栈之路-前端篇 | 第三讲.基础前置知识【前端标准与研发工具】学习笔记

欢迎关注「全栈工程师修炼指南」公众号 点击 &#x1f447; 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习&#xff01; 涉及 企业运维、网络安全、应用开发、物联网、人工智能、大数据 学习知识 “ 花开堪折直须折&#xff0c;莫待无花…...

Tomcat 线上调优记录

原始Tomcat配置 启动参数Plaintext-Xms256m -Xmx512m -XX:MaxPermSize128m Tomcat 参数配置XML<Executor name"tomcatThreadPool" namePrefix"catalina-exec-" maxThreads"1500" minSpareThreads"50" maxIdleTime"600000&q…...

学习 Python 之 Pygame 开发坦克大战(四)

学习 Python 之 Pygame 开发坦克大战&#xff08;四&#xff09;坦克大战添加音效1. 初始化音效2. 加入游戏开始音效和坦克移动音效3. 添加坦克开火音效4. 添加装甲削减音效5. 添加坦克爆炸音效6. 添加子弹击中边界音效坦克大战添加音效 我的素材放到了百度网盘里&#xff0c;…...

终极指南:10分钟搞定网易云音乐NCM加密文件转换

终极指南&#xff1a;10分钟搞定网易云音乐NCM加密文件转换 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 还在为网易云音乐的加密NCM文件无法在其他播放器使…...

3个强力技巧,用WaveTools彻底提升鸣潮游戏体验

3个强力技巧&#xff0c;用WaveTools彻底提升鸣潮游戏体验 【免费下载链接】WaveTools &#x1f9f0;鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 鸣潮工具箱WaveTools是一款专为《鸣潮》PC玩家设计的开源辅助工具&#xff0c;通过三大核心功能解…...

效率提升实测:OpenClaw+百川2-13B-4bits将周报时间从2小时缩短到15分钟

效率提升实测&#xff1a;OpenClaw百川2-13B-4bits将周报时间从2小时缩短到15分钟 1. 为什么我要折腾自动化周报 每周五下午&#xff0c;我的日历上总有一个雷打不动的"周报时间"。这个两小时的"酷刑"包括&#xff1a;翻遍Git提交记录、整理会议纪要碎片…...

ens33网络接口DOWN状态诊断与修复:从基础命令到Netplan配置

1. 为什么ens33接口会突然DOWN掉&#xff1f; 最近在调试Ubuntu虚拟机时&#xff0c;突然发现网络连接断了。用ip addr一看&#xff0c;ens33接口的状态赫然显示着"DOWN"。这种情况在虚拟化环境中其实很常见&#xff0c;我遇到过不下十次。通常表现为&#xff1a;虚拟…...

CSS如何利用--marker旋转列表图标_通过伪元素调整图标方向与间距

<p>::marker 不能用 transform 旋转&#xff0c;因其非完整 DOM 节点&#xff0c;仅支持 content、color、font-* 和 list-style-type&#xff1b;Chrome/Firefox 忽略 transform 等属性&#xff0c;Firefox 119 仅支持 rotate 新属性且兼容性差&#xff1b;可靠方案是用…...

MiniCPM-V-2_6 Anaconda环境快速搭建:隔离Python依赖一键启动

MiniCPM-V-2_6 Anaconda环境快速搭建&#xff1a;隔离Python依赖一键启动 你是不是也遇到过这种情况&#xff1a;想试试某个新的AI模型&#xff0c;结果光是配环境就折腾了大半天&#xff0c;各种包版本冲突&#xff0c;最后模型没跑起来&#xff0c;人先崩溃了。特别是像Mini…...

macOS极简部署:OpenClaw与Qwen3-14B镜像云端联调指南

macOS极简部署&#xff1a;OpenClaw与Qwen3-14B镜像云端联调指南 1. 为什么选择云端联调 去年冬天&#xff0c;当我第一次尝试在本地MacBook Pro上部署OpenClaw时&#xff0c;整整两天时间都耗在了环境配置上。从Homebrew版本冲突到Node.js权限问题&#xff0c;再到CUDA驱动不…...

快速搭建阿里Qwen3-4B-Instruct-2507:部署步骤详解与问题排查

快速搭建阿里Qwen3-4B-Instruct-2507&#xff1a;部署步骤详解与问题排查 1. 模型简介与核心能力 1.1 Qwen3-4B-Instruct-2507概述 Qwen3-4B-Instruct-2507是阿里巴巴通义实验室最新推出的轻量级开源大语言模型&#xff0c;作为Qwen系列的重要成员&#xff0c;它在保持40亿参…...

影墨·今颜保姆级教程:24GB显卡上跑FLUX.1-dev高清人像生成

影墨今颜保姆级教程&#xff1a;24GB显卡上跑FLUX.1-dev高清人像生成 1. 教程前言&#xff1a;从零开始掌握高端AI人像生成 你是否曾经被AI生成的人像那种"塑料感"所困扰&#xff1f;想要创作出具有电影质感、极致真实的时尚人像&#xff0c;却苦于没有合适的技术方…...

RK3506 AMP 异构多核通信 RPMsg-Lite 握手卡死 (wait_for_link_up)

RK3506 AMP 异构多核通信 RPMsg-Lite 握手卡死 (wait_for_link_up) 1. 问题背景与现象 硬件平台&#xff1a;Rockchip RK3506 (Cortex-A7 集群 Cortex-M0 协处理器) 软件环境&#xff1a;Linux 6.1 (主核) 裸机/RTOS (从核 MCU)&#xff0c;使用 RPMsg-Lite 框架进行核间通信…...