Map集合(Key-Value键值对集合)

Map基本使用

通过一个特定的关键信息(键)去查询对应的值。使用List来实现存在效率非常低的问题,因为平均需要扫描一半的元素才能确定,而Map这种键值(key-value)映射表的数据结构,作用就是能高效通过key快速查找value(元素)
 

Map<K,V>是一种键-值 映射表,当我们调用put(Kkey,V value)方法时,就把key和value做了映射并放入Map。当我们调用Vget(Kkey)时,就可以通过key获取到对应的value。如果key不存在,则返回nul1。和List类似,Map也是一个接口,最常用的实现类是HashMap。如果只是想查询某个key是否存在,可以调用boolean containsKey(Kkey)方法。

重复放入key-va1ue并不会有任何问题,但是一个key只能关联一个value。put()方法的签名是Vput(Kkey,V value),如果放入的key已经存在,lput()方法会返回被删除的旧va1ue,否则,返回null。
Map中不存在重复的key,因为放入相同的key,只会把原有的key-value对应的va1ue给覆掉。
此外,在一个Map中,虽然key不能重复,但value是可以重复的:

 

Map和List不同的是,Map存储都的是key-value的映射关系,并且,它不保证顺序。在遍历的时候,遍历的顺序既不一定是put()时放入的key的顺序,也不一定是key的排序顺序。使用Map时,任何依赖顺序的逻辑都是不可靠的。以HashMap为例,假设我们放入"A","B","c"这3个key,遍历的时候,每个key会保证被遍历一次且仅遍历一次,但顺序完全没有保证,甚至不同的JDK版本,相同的代码遍历的输出顺序都是不同的。

package com.xn.ffri;import java.util.HashMap;public class Fri06 {public static void main(String[] args) {//HashMap//KV键值对集合,key唯一,value允许重复HashMap<String, Integer> cityMap=new HashMap<String, Integer>();//put()方法:添加键值对//如果key不存在,键返回nullSystem.out.println(cityMap.put("X西安",11111));System.out.println(cityMap.put("C长沙",22222));System.out.println(cityMap.put("X厦门",33333));System.out.println(cityMap.put("W武汉",44444));//如果key存在,则保存新value,返回旧valueSystem.out.println(cityMap.put("X西安",11112));//int value1=cityMap.get("C长沙");System.out.println("C长沙 ==>"+value1);Integer value3=cityMap.get("G贵阳");System.out.println("G贵阳 ==>"+value3);int value2=cityMap.get("G贵阳");System.out.println("G贵阳 ==>"+value2);}
}
package com.xn.ffri;import java.lang.reflect.Array;
import java.text.CollationElementIterator;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;public class Fri07 {public static void main(String[] args) {//歌手分类HashMap<String, String[]> map = new HashMap<String, String[]>();map.put("华语", new String[] { "林俊杰", "陈奕迅", "邓紫棋", "薛之谦", "汪苏泷", "李荣浩" });map.put("欧美", new String[] { "贾斯丁比伯", "威肯", "艾兰沃克", "德雷克" });map.put("乐队", new String[] { "魔力红", "烟鬼组合", "共和时代", "辅音组合", "Linkin Park", "Westlife" });//遍历Map//方式1:获取所有的key,然后按照每个key获取对应的keySet<String> keys = map.keySet();//获取map中所有的keySystem.out.println("所有的keys:" + keys);Iterator<String> it = keys.iterator();while (it.hasNext()) {String key = it.next();//获取每个keyString[] val = map.get(key);//按照key获取对应的valueSystem.out.printf("%s --> %s\n", key, Arrays.toString(val));}//方式2://根据key,获取value(数组)
//		String[]array=map.get("乐队")月
//		for (String name array){
//		System.out.println(name);
//		}//获取所有的value//Set<String> keys = map.keySet();获取所有的keyCollection<String[]> values=map.values();for(String[] arr:values) {System.out.println(Arrays.toString(arr));}////方式3:将每个KV键值对按照Entry类型对象,统一获取Set<Entry<String,String[]>> entrys=map.entrySet();for(Entry<String,String[]> keyvalue:entrys) {System.out.printf("%s -- > %s\n",keyvalue.getKey(),Arrays.toString(keyvalue.getValue()));}//判断key是否存在boolean is=map.containsKey("日韩");//根据key获取value,如果key不存在。则返回default默认值String[] value=map.getOrDefault("日韩", new String[] {});//根据key删除KV键值对map.remove("欧美");//获取键值对的数量int size=map.size();}
}

小结
Map是一种映射表,可以通过key快速查找value;
可以通过for each遍历keySet(),也可以通过for each遍历entryset(),直接获
取key-value键值对;
最常用的一种Map实现是HashMap;(无序,key唯一)
HashMap的数据结构采用数组+链表+红黑树
HashMap的按照key的hash值计算数组中的存储位置下标,计算方式:(n-1)&hash。
如果在该下标位置已经存在元素,代表产生哈希冲突,则采用链地址法处理,以单向链表的形
式,将新元素存储在链表的尾部(尾插法)。
当链表中Node节点的数量大于8并且数组的长度大于64时,链表会转换成一个红黑树,有
利于查搜索。
HashMap的默认容量为16,加载因子为0.75f,当集合元素个数超过扩容阈值(容量*加
载因子)时,HashMap会将底层数组容量按照2倍进行扩容。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/648949.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音频格式之AAC:(3)AAC编解码原理详解

系列文章目录 音频格式的介绍文章系列&#xff1a; 音频编解码格式介绍(1) ADPCM&#xff1a;adpcm编解码原理及其代码实现 音频编解码格式介绍(2) MP3 &#xff1a;音频格式之MP3&#xff1a;(1)MP3封装格式简介 音频编解码格式介绍(2) MP3 &#xff1a;音频格式之MP3&#x…

HNU-编译原理-甘晴void学习感悟

前言 熬过煎熬的考试周、复习以及更加煎熬的等成绩&#xff0c;查到成绩的那一刻&#xff0c;心里还是挺开心的。 虽然我没有完全学懂这门课程&#xff0c;但我还是兢兢业业地通过了课程的考试&#xff0c;拿到了这门课程的认可。 记录一下自己对编译原理的学习感悟&#xf…

优化用户体验测试应用领域:提升产品质量与用户满意度

在当今数字化时代&#xff0c;用户体验测试应用已经成为确保产品质量、提升用户满意度的关键工具。随着技术的不断发展&#xff0c;用户的期望也在不断演变&#xff0c;因此&#xff0c;为了保持竞争力&#xff0c;企业必须将用户体验置于产品开发的核心位置。本文将探讨用户体…

使用JavaScript实现复杂功能:一个完整的电商网站搜索功能

一、概述 随着互联网的发展&#xff0c;电子商务网站已经成为人们购物的重要平台。而在这些网站中&#xff0c;搜索功能无疑是核心功能之一。用户可以通过搜索快速找到他们需要的商品&#xff0c;从而提高购物体验。本文将详细介绍如何使用JavaScript实现一个完整的电商网站搜…

知识圣殿,智慧熔炉

知识圣殿&#xff0c;智慧熔炉 知识殿堂&#xff0c;巍然屹立 一座灵魂熔炉&#xff0c;号称图书馆 万卷书香盈架&#xff0c;智慧如星河汇聚 每一册书页&#xff0c;流淌着人类文明的血脉 钢笔与墨水交织诗篇 思想发芽&#xff0c;真理绽放光焰 浩瀚知识海洋&#xff0c;波涛…

Dlearning

Deep Learning Basic 神经网络&#xff1a; #mermaid-svg-rR22a8Udy5SxGOoP {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-rR22a8Udy5SxGOoP .error-icon{fill:#552222;}#mermaid-svg-rR22a8Udy5SxGOoP .error-t…

【MATLAB源码-第122期】基于matlab斑马优化算法(ZOA)无人机三维路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 斑马优化算法&#xff08;Zebra Optimization Algorithm&#xff0c;简称ZOA&#xff09;是一种模仿斑马群体行为的优化算法。在自然界中&#xff0c;斑马是一种社会性很强的动物&#xff0c;它们具有独特的群体行为模式&…

C语言中的整数安全:溢出、回绕

一、无符号数回绕 无符号数永远不会溢出&#xff0c;只是在无限的循环往复。对于加法、乘法&#xff0c;假装有额外的有效位来承载运算结果&#xff0c;最后再直接截断。 for (uint32 i n; i > 0; i--) {... // 死循环 } 加法例子 uint8 sum ...; uint8 i ...; if (…

【STM32】STM32学习笔记-硬件SPI读写W25Q64(40)

00. 目录 文章目录 00. 目录01. SPI简介02. W25Q64简介03. SPI相关API3.1 SPI_Init3.2 SPI_Cmd3.3 SPI_I2S_SendData3.4 SPI_I2S_ReceiveData3.5 SPI_I2S_GetFlagStatus3.6 SPI_I2S_ClearFlag3.7 SPI_InitTypeDef 04. 硬件SPI读写W25Q64接线图05. 硬件SPI读写W25Q64示例06. 程序…

1块9毛钱,修复拓牛TC1D智能垃圾桶盖子不能正常开合的故障

前言 21年9月份买了拓牛的智能垃圾桶&#xff0c;一直用的很流畅&#xff0c;再加上屋里没啥有机垃圾&#xff0c;也没有宠物&#xff0c;用上之后每次投入垃圾&#xff0c;之后都会盖上盖子&#xff0c;没有很多的异味散发&#xff0c;屋里也没有蟑螂等害虫。 再加上门口有帘…

Chrome单独配置代理的方法

Windows Windows上单独对Chrome设置代理&#xff0c;需要在启动时传递参数&#xff0c;具体步骤如下。 在Chrome浏览器的快捷方式上右击&#xff0c;进入属性。在 快捷方式 标签下找到 目标 项目&#xff0c;在最后添加 –proxy-server“socks5://xxx.xxx.xx.xx:xxxx” 如果要…

Flink SQL 实时数据开发经验总结

使用SQL实现流处理的核心技术 在了解了Table\SQL API的使用方法以及作业运行机制之后&#xff0c;接下来分析SQL实现流处理的核心技术。 为什么要分析这个问题呢&#xff1f; 因为传统的关系代数以及SQL最开始是为了批处理设计的&#xff0c;在传统关系型数据库以及批处理中…

Java面试题(7)

35.什么是反射 反射就是在程序运行期间动态的获取对象的属性和方法的功能叫做反射。它能够在程序运行期间&#xff0c;对于 任意一个类&#xff0c;都能知道它所有的方法和属性&#xff0c;对于任意一个对象&#xff0c;都能知道他的属性和方法。 获取 Class对象的三种方式&a…

扩展坞 接两个显示器

笔记本电脑如何外接两个显示器&#xff0c;达到三个屏同时显示&#xff1f; 3 笔记本有 2 个显示扩展接口 目前笔记本中最常见的就是 1 个 HDMI 口 1 个支持 DP 协议的 Type-C 口或 2 个支持 DP 协议的 Type-C 口&#xff0c;此时使用 HDMI 线和 Type-C 转接线分别直连两台显…

SpringBoot操作Jedis

SpringBoot操作Jedis 1、pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://ma…

Ceres 源码阅读之 TrustRegionMinimizer::Minimize 函数简析

文章目录 Part.I IntroductionPart.II 源码剖析Chap.I TrustRegionMinimizer 类介绍Chap.II Minimize 函数介绍Part.I Introduction Ceres 中求解优化问题的迭代求解方法(minimizer_type)有线性搜索方法(LINEAR_SEARCH)、信赖域方法(TRUST_REGION)等,其中TRUST_REGION 是…

大创项目推荐 目标检测-行人车辆检测流量计数

文章目录 前言1\. 目标检测概况1.1 什么是目标检测&#xff1f;1.2 发展阶段 2\. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程 最后 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 行人车辆目标检测计数系统 …

Conda python管理环境environments 二 从入门到精通

Conda系列&#xff1a; 翻译: Anaconda 与 miniconda的区别Miniconda介绍以及安装Conda python运行的包和环境管理 入门Conda python管理环境environments 一 从入门到精通 1. 指定环境environment的位置 可以通过提供路径来控制 conda 环境所在的位置 复制到目标目录。例如…

实习日志6

1.发现base64编码对同一张图片编码好像不会改变 用word文档的查重&#xff0c;似乎是一模一样的 于是去看了一下CSDN 1.1.base64编码原理 编码原理 使用 Base64 进行编码&#xff0c;大致可以分为 4 步&#xff1a; 将原始数据每三个字节作为一组&#xff0c;一共是 24 个 …

Python解释器的启动方式

Python解释器的启动方式 Python 解释器是一个运行 Python 代码的程序。它读取并执行写成 Python 语言的指令。由于 Python 是一种解释型语言&#xff0c;所以它的代码不需要编译成机器语言就可以直接运行。这就是为什么我们需要一个解释器来逐行读取 Python 代码&#xff0c;将…