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

Java集合中的Map

Map


Map接口

键 值 对存储

键不能重复,值可以重复

Map三个实现类的存储结构

HashMap:Hash表+链表+红黑树结构 线程不安全

TreeMap: 底层红黑树实现

HashTable:hash表+链表+红黑树 线程安全

HashMap

HashMap常用方法

 HashMap<String,String>map=newHashMap<>();
map.put("s","a");//添加元素,是无序的,键可以重复,值不可以重复
map.remove("s");//根据键可删除整个对
map.get("s");//根据键来找值,返回的是value
map.containskey("s");//判断集合中是否有这个键
map.containsvalue("a");//判断集合中是否有这个值
Set<String>kset=map.keyset();//单独将集合中的key这一列元素拿出来,返回的是一个set集合
List<String>list=map.Values();//将集合中value这一列元素拿出来,返回的是一个list集合

put方法添加元素整个过程,以及底层存储结构(重要)

底层结构:哈希表(数组)+链表+红黑树

数组主要用来定位元素位置,hash值取余数组长度等于位置索引,但有可能不同元素哈希值不同,但算出位置一样,此时使用链表来存储位置相同元素,当链表长度等于8时,将链表自动转换为红黑树,当红黑树长度删减为6时,又转回链表。

数组的扩容机制:hash表开始默认长度是16,当元素占数组长度为0.75时(这个倍数保证效率和空间不被浪费,用一定的空间换取效率),会对数组进行扩容操作,扩容为原来的2倍。

完整过程(也是源码的完整过程)

当我们向hashMap集合中添加元素时,判断重复后(与hashSet去重方法一致,因为其底层也是用hashmap存储的),根据key值调用hash方法(并不是hashcode方法,它是hashMap类中的一个方法)计算出此key在数组中的位置,如果这个位置没有元素,则直接添加,若已经有了元素,此时会有三种情况,一是此位置存储的这个元素与新加的元素键相同,但值不相同,我们选择替换值;二是此位置的元素为链表结构,我们添加在链表尾,还需要注意是否化为红黑树;三是此位置的元素已经转为红黑树,底层以树的方式添加(注:二三种情况也会有一出现,具体也是要替换值,在底层都有实现)。

put方法源码:

源码中的一些常量

TreeMap

底层是红黑树实现

key所在类必须实现comparable接口,可以按照值自然顺序排序(也可指定)

也是键值两列,其余与TreeSet类似

HashTable

是线程安全的,其中不能存储key为null的对象(具体可看源码,且HashMap可以但只能存储一个键为null的元素)

底层也是hash结构+链表+红黑树,但他是线程安全的,在并发量较低的情况下。

Map的遍历/Map集合迭代

  1. 使用增强for

Set<String>keyset=map.keySet();//先拿到键这一列
for(Stringkey: keyset){
System.out.println(key+map.get(key));//通过键找值
}

2.建议的遍历方式,使用entrySet

map底层为了方便遍历,将每个键值对都放入一个Entry对象中,并将多个Entry对象放到一个set集合中

Set<Entry<String,String>>entryset=map.entry();
//拿到entry集合后,我们遍历entryset这个集合就可以遍历map

相关文章:

Java集合中的Map

MapMap接口键 值 对存储键不能重复&#xff0c;值可以重复Map三个实现类的存储结构HashMap&#xff1a;Hash表链表红黑树结构 线程不安全TreeMap&#xff1a; 底层红黑树实现HashTable&#xff1a;hash表链表红黑树 线程安全HashMapHashMap常用方法HashMap<String,String>…...

【java】springboot项目启动数据加载内存中的三种方法

文章目录一、前言二、加载方式2.1、 第一种&#xff1a;使用PostConstruct注解&#xff08;properties/yaml文件&#xff09;。2.2、 第二种&#xff1a;使用Order注解和CommandLineRunner接口。2.3、 第三种&#xff1a;使用Order注解和ApplicationRunner接口。三、代码示例3.…...

【GO】29.go-gin支持ssl/tls,即https示例

本文为演示采用自签名证书一.生成证书通过openssl工具生成证书1.1 安装opensslmacos通过brew安装brew install openssl1.2 生成跟证书私钥openssl genrsa -out ca.key 40961.3 准备配置文件vim ca.conf内容如下[ req ] default_bits 4096 distinguished_name req_disti…...

逻辑仿真工具VCS的使用-Makefile

Gvim写RTL code&#xff0c;VCS仿真&#xff0c;Verdi看波形&#xff0c;DC做综合下约束&#xff0c;Primetime做STA&#xff0c;Spyglass做异步时序分析。 VCS全称Verilog Computer Simulation &#xff0c;VCS是逻辑仿真EDA工具的编译源代码的命令。要用VCS做编译仿…...

信息系统安全技术

一、信息安全的有关概念 1. 属性2. 四个安全层次※3. 信息安全保护等级※4. 安全保护能力的等级※ 二、信息加密、解密与常用算法 1. 对称加密2. 非对称加密3. Hash函数4. 数字签名5. 认证 三、信息系统安全 1. 计算机设备安全2. 网络安全3. 操作系统安全4. 数据库安全5. 应用系…...

【数据结构】最小生成树(Prim算法,普里姆算法,普利姆)、最短路径(Dijkstra算法,迪杰斯特拉算法,单源最短路径)

文章目录前置问题问题解答一、基础概念&#xff1a;最小生成树的定义和性质&#xff08;1&#xff09;最小生成树&#xff08;Minimal Spanning Tree&#xff09;的定义&#xff08;2&#xff09;最小生成树&#xff08;MST&#xff09;的性质二、如何利用MST性质寻找最小生成树…...

Session与Cookie的区别(一)

从我刚开始学程序时这一题就常出现在面试考题里&#xff0c;一直到现在都还是能看见这个问题。 这个问题重要吗&#xff1f;我觉得蛮重要的。因为 Session 所代表的是「状态」&#xff0c;如果没有了状态&#xff0c;一大堆功能都会失效。 对于工程师来说必须去理解什么是 Sess…...

【Java】重载和重写的区别

重载(Overload) 在同一个类中&#xff0c;同名的方法如果有不同的参数列表&#xff08;参数类型不同、参数个数不同甚至是参数顺序不同&#xff09;则视为重载。同时&#xff0c;重载对返回类型没有要求&#xff0c;可以相同也可以不同&#xff0c;但不能通过返回类型是否相同…...

AcWing 第 90 场周赛

目录A、首字母大写B、找数字C、构造字符串A、首字母大写 原题链接&#xff1a;AcWing 4806. 首字母大写 签到题。 #include <bits/stdc.h>using namespace std;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);string s;cin >> s;s[0] toupper(s[0]);…...

刚刚,体验了一把Bing chat很爽

文章目录刚刚&#xff0c;体验了一把Bing chat很爽你能做啥&#xff1f;与chatgpt有什么不同&#xff1f;以下是Bingchat的 10个新功能1⃣️在网上搜索结果2⃣️摘要链接3⃣️对话助手4⃣️向您发送实际信息&#xff0c;正确的链接5⃣️在单个查询中执行多个搜索6⃣️玩冒险游戏…...

牛客网Python篇数据分析习题(二)

1.现有一个Nowcoder.csv文件&#xff0c;它记录了牛客网的部分用户数据&#xff0c;包含如下字段&#xff08;字段与字段之间以逗号间隔&#xff09;&#xff1a; Nowcoder_ID&#xff1a;用户ID Level&#xff1a;等级 Achievement_value&#xff1a;成就值 Num_of_exercise&a…...

如何用Python打包好exe文件,并替换图标

前言 Python打包&#xff1f;打包exe文件&#xff1f;怎么操作&#xff1f; ok&#xff0c;今天我来分享分享&#xff0c;教你们如何打包号文件&#xff0c;顺便还来展示一下&#xff0c;如何替换好图标 首先把你的代码准备好&#xff0c;尽量不要中文路径&#xff0c;容易报…...

NFC概述摘要

同学,别退出呀,我可是全网最牛逼的 WIFI/BT/GPS/NFC分析博主,我写了上百篇文章,请点击下面了解本专栏,进入本博主主页看看再走呗,一定不会让你后悔的,记得一定要去看主页置顶文章哦。 原理来说,NFC和Wi-Fi类似,利用无线射频技术来实现设备间通信。NFC的工作频率为13.5…...

Python-项目实战--贪吃蛇小游戏(1)

1.贪吃蛇游戏规则贪吃蛇游戏规则如下:1.1开始和结束贪吃蛇初始出现在游戏窗口的左上角位置,体长共有3节游戏过程中&#xff0c;一旦蛇头撞到了窗口的边缘或者身体的其他部位,游戏结束游戏过程中&#xff0c;点击游戏窗口的关闭按钮&#xff0c;或者按下ESC键可以直接退出游戏一…...

vscode sftp从linux服务器下载文件至本地:No such file or dictionary【已解决】

在服务器跑完程序需要下载数据的时候报错&#xff1a; [warn] ENOENT: no such file or directory, open /home/LIST_2080Ti/.ssh/config load /home/LIST_2080Ti/.ssh/config failed 完整报错内容如下&#xff1a; [02-10 08:38:47] [info] config at /home/LIST_2080Ti {&q…...

详解指针(2)(初阶版)

前言&#xff1a;内容包括&#xff1a;指针运算&#xff0c;指针和数组&#xff0c;二级指针&#xff0c;指针数组 详解指针&#xff08;1&#xff09;&#xff08;点击即跳转&#xff09; part 1&#xff1a;指针运算 1 指针-整数 以如下代码为例&#xff1a;初始化数组内容…...

超详细讲解字符串查找函数(保姆级教程!!!)

超详细讲解字符串查找函数&#xff08;保姆级教程&#xff01;&#xff01;&#xff01;&#xff09;字符串查找函数strstr函数strstr函数的使用strstr函数的模拟实现strtok函数strtok函数的使用strtok函数的模拟实现strpbrk函数strpbrk函数的使用strpbrk函数的模拟实现strcspn…...

LeetCode-1138. 字母板上的路径【哈希表,字符串】

LeetCode-1138. 字母板上的路径【哈希表&#xff0c;字符串】题目描述&#xff1a;解题思路一&#xff1a;首先考虑坐标位置&#xff0c;字符是有序的从0开始&#xff0c;当前字符c的行为(c-a)/5,列为(c-a)%5。其次是考虑特殊情况z。若当前从‘z’开始则只能往上走;若是其他字符…...

Vue 可配置化的路由缓存(Vu2 Vue3)

Vue 可配置化的路由缓存&#xff08;Vu2 & Vue3&#xff09; 1 介绍 在Vue的项目当中&#xff0c;路由缓存是一个比较常见的功能&#xff0c;譬如&#xff0c;从列表页面进入到详情页面&#xff0c;返回到列表页面时&#xff0c;如果可以保持列表的状态&#xff0c;那用户…...

Linux VPU驱动

1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. 概述 VPU 是用来进行图像、视频数据进行硬件编、解码的硬件模块。内部集成了 Encoder、Decoder 功能部件进行图像、视频数据进行硬件编、解码&a…...

从一次内部渗透测试说起:我是如何利用SSRF漏洞,通过Gopher协议拿下Redis的

渗透测试实战&#xff1a;SSRF漏洞到Redis未授权访问的完整攻击链剖析 在一次常规的企业内部渗透测试中&#xff0c;我发现了一个看似普通的SSRF漏洞&#xff0c;却意外打开了通往内网核心系统的大门。这个故事不是教科书式的漏洞复现&#xff0c;而是一个真实攻击者视角下的完…...

WPF中OxyPlot不同图表的使用

在 WPF 中使用 OxyPlot 实现不同图表&#xff0c;核心在于创建和配置PlotModel对象&#xff0c;并将其绑定到PlotView控件上进行显示。通过向PlotModel中添加不同类型的Series&#xff08;数据系列&#xff09;&#xff0c;即可轻松实现折线图、柱状图、饼图、散点图等多种图表…...

GTX 1660实战AI视频生成:低显存环境下的模型瘦身与帧插值方案

1. 项目概述&#xff1a;在入门级显卡上跑通AI视频生成最近看到不少朋友对AI视频生成很感兴趣&#xff0c;但总被“需要RTX 4090”、“至少24GB显存”这类硬件门槛劝退。作为一个常年混迹于“丐版”硬件圈的老玩家&#xff0c;我决定用我手头这块服役多年的GTX 1660&#xff08…...

AI时代算力、模型与安全的三角博弈:从Nvidia生态到工程实践

1. 项目概述&#xff1a;当算力、智能与安全交织的时代最近和几个在芯片设计、大模型应用以及安全服务公司工作的朋友聊天&#xff0c;大家不约而同地都聊到了一个话题&#xff1a;我们正处在一个由Nvidia芯片驱动的AI浪潮之巅&#xff0c;但这场盛宴似乎并非没有天花板。一方面…...

免费在线PPT制作工具PPTist:浏览器中的专业演示文稿创作平台

免费在线PPT制作工具PPTist&#xff1a;浏览器中的专业演示文稿创作平台 【免费下载链接】PPTist PowerPoint-ist&#xff08;/pauəpɔintist/&#xff09;, An online presentation application that replicates most of the commonly used features of MS PowerPoint, allow…...

冥想第一千八百七十八天(1878)

1.周二&#xff0c;5.12日&#xff0c;天气晴朗&#xff0c;下午阴&#xff0c;项目上全力以赴的一天。今天是休息日&#xff0c;下班带溪溪去游泳。 2.感谢父母&#xff0c;感谢朋友&#xff0c;感谢家人&#xff0c;感谢不断进步的自己。...

华为eNSP模拟器实战:用VRRP+MSTP给公司网络做个高可用冗余(附完整配置命令)

华为eNSP企业级网络高可用架构实战&#xff1a;VRRP与MSTP深度协同设计 当一家中型企业的终端规模突破500台时&#xff0c;网络架构的脆弱性往往会突然暴露——某个交换机的意外宕机可能导致整个部门断网&#xff0c;核心链路的拥塞会让关键业务卡顿不已。这时仅靠基础的STP和…...

基于VitePress构建开源AI智能体框架深度中文文档站实战指南

1. 项目概述&#xff1a;一个为AI智能体框架量身打造的中文文档站如果你正在寻找一个能帮你把Claude、GPT这些大模型快速接入到微信、Telegram、飞书等聊天软件的开源框架&#xff0c;那你大概率会接触到OpenClaw&#xff08;原名ClawdBot&#xff09;。但当你兴冲冲地打开官方…...

智能网联汽车窄路车流预测与协同通行【附仿真】

✨ 长期致力于智能网联汽车、窄路段、短时车流量预测、协同通行研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;窄路车流时空异质图特征构建&#xff…...

别再让Future.get()拖慢你的并发程序!手把手教你用CompletionService优化Java任务结果获取

解锁Java并发新姿势&#xff1a;CompletionService如何让任务结果获取效率翻倍 想象一下这样的场景&#xff1a;你精心设计的线程池正在处理一批耗时各异的任务&#xff0c;有的像闪电般完成&#xff0c;有的却像老牛拉车。当你用Future.get()逐个获取结果时&#xff0c;系统却…...