Java_Map集合

认识Map集合

Map集合称为双列集合,格式:{key1=value,key2=value2,key3=value3,…},一次需要存一对数据作为一个元素。
Map集合的每个元素“Key=value” 称为一个键值对/键值对对象/一个Entry对象,Map集合也被叫做“键值对集合”
Map集合的所有键是不允许重复的,但值可以重复,键和值是一 一对应的,每一个键只能找到自己的对应值(Map集合的键不能重复,Map集合可以重复 )

Map集合体系

Map集合体系

Map集合体系的特点

注意:Map系列集合的特点都是由键决定的,值只是一个附属品,值是不做要求的

HashMap(由键决定特点):无序、不重复、无索引(用的最多)
LinkedHashMap(由键决定特点):由键决定的特点:有序、不重复、无索引。
TreeMap(由键决定特点):按照大小默认升序排序、不重复、无索引。

   public static void main(String []args){Map<String ,Integer> map = new LinkedHashMap<>();map.put("手表"100);map.put("手表"200);map.put("手机",2);map.put("Java",2);map.put(null,null);System.out.println(map);Map<Integer,String> map1 = new TreeMap(); //可排序、不重复、无索引map1.put(23,"Java");map1.put(23,"MySQL");map1.put(19,"李四");map1.put(20,"王五");System.out.println(map1);}

为什么要先学习Map的常用方法?

Map 是双列集合的祖宗,它的功能是全部双列集合都可以继承过来使用的。

 public class MapTest2{public static void main(String[] args){//1、添加元素:无序、无重复、无索引Map<String,Integer> map = new HashMap();map.put("手表",100);map.put("手表"220);map.put("手机"2);map.put(null,null);System.out.println(map);//map = {null=null,手表=220,Java=2,手机=2}//2、public int size():获取集合的大小System.out.println(map.size());//3、public void clear();清空集合map.clear();System.out.println(map);//4、public boolean isEmpty():判断集合是否为空,为空返回True,反之。System.out.println(map.isEmpty());//5、public V get(Object key) 根据键获取对应值int v1 = map.get("手表");System.out.println(v1);System.out.println(map.get("手机"));System.out.println(map.get("张三"));//6、public V remove(Obejct key):根据键删除整个元素(删除键会返回的值)System.out.println(map.remove("手表"));System.out.println(map);//7、public boolean containsKey(Object key):判断是否包含某个键,包含返回Ture,反之falseSystem.out.println(map.containsKey("手表"));System.out.println(map.containsKey("手机"));//8、public boolean containsValue(Object value):判断是否包含某个信息System.out.println(map.containsValue(2));//trueSystem.out.println(map.containsValue("2"));//false//9、public Set<k> keySet(): 获取Map集合的全部键Set<String> keys = map.keySet();System.out.println(keys);//10、public Collection <V> values();获取Map集合的全部值Collection<Integer> values = map.values();System.out.println(values);//11、把其它的Map集合的数据倒入到自己的集合中来Map<String,Integer> map1 = new HashMap<>();map1.put("java1",10);map1.put("java2",20);Map<String,Integer> map2 = new HashMap<>();map2.put("java3",10);map2.put("java2",222);map1.putAll(map2);//putAll: 把Map2集合中的元素全部倒入一份到map集合System.out.println(map1);System.out.println(map2);}}
方法名称说明
public V put(K key,V value)添加元素
public int size()获取集合大小
public void clear()清空集合
public void boolean isEmpty()判断集合是否为空,为空返回true,反之false
public V get(Object key)根据键获取对应值
public V remove(Object key)根据键删除整个元素
public boolean containsKey(Object key)判断是否包含某个键
public boolean containsValue(Object value)判断是否包含某个值
public Set keySet()全部键的集合
public Collection values获取Map集合的全部值

Map集合的遍历方式

键值对

Map提供的方法说明
Set<Map.Entry<K,V> entrySet()获取所有“键值对”的集合
public class MapTest2{public static void main(String [] args){Map<String,Double> map = new HashMap<>();map.put("蜘蛛精"169.8);map.put("紫霞",165.8);map.put("至尊宝",169.5);map.put("牛魔王",184.5);System.out.println(map);//1、调用Map集合提供的entrySet方法,把Map集合转换成键值对象类型的Set集合Set<Map.Entry<String,Double>> entries = map.entrySet();for(Map.Entry<String,Double> entry :entries){String key = entry.getKey();double valuel = entry.getValue();System.out.println(key+"--=----->"+value);}}
} 

Map 集合的遍历方式三:Lambda

需要用到Map的如下方法

方法名称说明
default void forEach(BiConsumer<? super k, ? super v> action)结合lambda遍历Map集合
public class MapTest2{public static void main(String [] args){Map<String,Double> map = new HashMap<>();map.put("蜘蛛精"169.8);map.put("紫霞",165.8);map.put("至尊宝",169.5);map.put("牛魔王",184.5);System.out.println(map);//map = {蜘蛛精=169.8,牛魔王=183.9,至尊宝=169.5,紫霞=165.8}map.forEach(K,V)->{System.out.println(k+"--->>"+v);});map.forEach(new BiConsumer<String,Double>(){@Overridepublic void accept(String k ,Double v){System.out.println(k+"----"+v);}});

HashMap集合的底层原理

HashMap跟HashSet的底层原理是一摸一样的,都是基于哈希表实现的。

实际上:原来学的Set系列集合的底层就是基于Map实现的,只是Set集合中的元素只要键数据,不要值数据

 public HashSet(){map = new HashMap<>();}

哈希表

JDK 8之前,哈希表 = 数组+链表
JDK 8开始,哈希表 = 数组+链表+红黑树
哈希表是一种增删改查数据,性能都较好的数据结构.

HashMap底层是基于哈希表实现的
HashMap集合是一种增删改查的数据,性能都比较好的集合
但是它无序,不能重复,没有索引支持的(由键决定特点)
HashMap的键依赖hashCode方法和equals方法保证键的唯一
如果键存储的是自定义类型对象,可以通过重写hashCode和equals方法,这样可以保证多个对象内容一样时,HashMap集合就能认为是重复的。

   public class Test1HashMap{public static void main(String[] args){Map<Student,String> map = new HashMap();map.put(new Student("蜘蛛精",25,168.5),"蚕丝洞");map.put(new Student("蜘蛛精",25,168.5),"水帘洞");map.put(new Student("至尊宝",23,163.5),"水帘洞");map.put(new Student("牛魔王",28,183.5),"牛头山");System.out.println(map);}}

LinkedHashMap 集合的原理

底层数据结构依然是基于哈希实现的,只是每个键值对元素又额外的多了一个双链表机制记录元素顺序(保证有序)
实际上:原来学习LinkedHashSet集合的底层原理就是LinkedHashMap

TreeMap

特点:不重复、无索引、可排序(按照键的大小默认升序排序,只能对键排序)
原理:TreeMap跟TreeSet集合的底层原理是一样的,都是基于红黑树实现的排序。

TreeMap集合也同样支持两种方式来指定排序规则
让类实现Comparable 接口,重写比较规则。
TreeMap集合也有一个参数构造器,支持创建Comparator比较器对象,以便用来指定比较规则。

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

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

相关文章

Vue笔记(二)

Vue&#xff08;一&#xff09;&#xff1a;Vue笔记&#xff08;一&#xff09;-CSDN博客 综合案例&#xff1a;水果购物车 项目功能&#xff1a; 视频链接&#xff1a;034-水果购物车-基本渲染_哔哩哔哩_bilibili 目录结构&#xff1a; index.css .app-container {padding-…

已解决Error || RuntimeError: size mismatch, m1: [32 x 100], m2: [500 x 10]

已解决Error || RuntimeError: size mismatch, m1: [32 x 100], m2: [500 x 10] 原创作者&#xff1a; 猫头虎 作者微信号&#xff1a; Libin9iOak 作者公众号&#xff1a; 猫头虎技术团队 更新日期&#xff1a; 2024年6月6日 博主猫头虎的技术世界 &#x1f31f; 欢迎来…

第十一篇——信息增量:信息压缩中的保守主义原则

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 通过信息中的保守主义&#xff0c;我想到了现实中人的保守主义一样&#…

汇编语言作业(五)

目录 一、实验目的 二、实验内容 三、实验步骤以及结果 四、实验结果与分析 五、 实验总结 一、实验目的 1.熟悉掌握汇编语言的程序结构&#xff0c;能正确书写数据段、代码段等 2&#xff0c;利用debug功能&#xff0c;查看寄存器&#xff08;CS,IP,AX,DS..)及数据段的…

基于AI大文本模型的智慧对话开发设计及C#源码实现,实现智能文本改写与智慧对话

文章目录 1.AI 大模型发展现状2.基于AI服务的智慧对话开发2.1 大模型API选择2.2 基于C#的聊天界面开发2.3 星火大模型API接入2.4 优化开发界面与显示逻辑 3.源码工程Demo及相关软件下载参考文献 1.AI 大模型发展现状 端午假期几天&#xff0c;关注到国内的AI大模型厂商近乎疯狂…

计算机网络期末考试知识点(关键词:江中)

目录 大家端午节快乐呀&#xff01;又到了一年两度的期末考试月了&#xff0c;这里给大家整理了一些复习知识点&#xff0c;大家可以边吃粽子边复习&#xff0c;事半功倍哈哈哈。祝各位期末过&#xff01;过&#xff01;过&#xff01;。 1 第一章 计算机网络体系结构 计算机…

Kaggle -- Digit Recognizer 98.57%

使用卷积神经网络进行模型构建&#xff0c;代码如下&#xff1a; import pandas as pd import numpy as np import torch import torch.nn as nn import torch.optim as optim import torch.nn.functional as F from torch.utils.data import DataLoader, Dataset, random_spl…

【MySQL】聊聊唯一索引是如何加锁的

首先我们要明确&#xff0c;加锁的对象是索引&#xff0c;加锁的基本单位是next-key lock&#xff0c;由记录锁和间隙锁组成。next-key是前开后闭区间&#xff0c;间隙锁是前开后开区间。根据不同的查询条件next-key 可能会退化成记录锁或间隙锁。 在能使用记录锁或者间隙锁就…

电路防护-贴片陶瓷气体放电管

贴片陶瓷气体放电管 GDT工作原理GDT主要特性参数典型电路压敏电阻与 TVS 管的区别 GDT工作原理 陶瓷气体放电管是一种电子器件&#xff0c;其工作原理基于气体放电现象。这种管子的内部填充了一种特定的气体&#xff0c;通常是氖气或氩气。当管子两端施加足够的电压时&#xf…

vivado HW_ILA_DATA、HW_PROBE

HW_ILA_DATA 描述 硬件ILA数据对象是ILA调试核心上捕获的数据的存储库 编程到当前硬件设备上。upload_hw_ila_data命令 在从ila调试移动捕获的数据的过程中创建hw_ila_data对象 核心&#xff0c;hw_ila&#xff0c;在物理FPGA上&#xff0c;hw_device。 read_hw_ila_data命令还…

nginx优化与防盗链【☆☆☆】

目录 一、用户层面的优化 1、隐藏版本号 方法一&#xff1a;修改配置文件 方法二&#xff1a;修改源码文件&#xff0c;重新编译安装 2、修改nginx用户与组 3、配置nginx网页缓存时间 4、nginx的日志切割 5、配置nginx实现连接超时 6、更改nginx运行进程数 7、开启网…

1 c++多线程创建和传参

什么是进程&#xff1f; 系统资源分配的最小单位。 什么是线程&#xff1f; 操作系统调度的最小单位&#xff0c;即程序执行的最小单位。 为什么需要多线程&#xff1f; &#xff08;1&#xff09;加快程序执行速度和响应速度, 使得程序充分利用CPU资源。 &#xff08;2&…

Python 全栈体系【四阶】(五十八)

第五章 深度学习 十三、自然语言处理&#xff08;NLP&#xff09; 3. 文本表示 3.1 One-hot One-hot&#xff08;独热&#xff09;编码是一种最简单的文本表示方式。如果有一个大小为V的词表&#xff0c;对于第i个词 w i w_i wi​&#xff0c;可以用一个长度为V的向量来表示…

npm install 的原理

1. 执行命令发生了什么 &#xff1f; 执行命令后&#xff0c;会将安装相关的依赖&#xff0c;依赖会存放在根目录的node_modules下&#xff0c;默认采用扁平化的方式安装&#xff0c;排序规则为&#xff1a;bin文件夹为第一个&#xff0c;然后是开头系列的文件夹&#xff0c;后…

Linux网络诊断工具mtr命令详解

目录 一、mtr概述 二、mtr的特点 1、动态路由显示 2、数据包类型 3、显示延迟和丢包 4、过滤和日志 5、网络探测 三、基本用法 1、基本语法 2、帮助 3、常用选项 四、输出解释 1、常见mtr命令及其输出 2、输出解释 四、命令实例 1. 最基本的用法 2. 显示报告形式…

SpringBoot 配置事务

SpringBoot 在启动时已经加载了事务管理器&#xff0c;所以只需要在需要添加事务的方法/类上添加Transactional即可生效&#xff0c;无需额外配置。 TransactionAutoConfiguration 事务的自动配置类解析&#xff1a; SpringBoot 启动时加载/META-INF/spring/org.springframewor…

帕友的小贴士,锻炼

帕金森病作为一种慢性神经系统疾病&#xff0c;对患者的生活质量产生了深远的影响。虽然医学界对于帕金森病的治疗仍在不断探索&#xff0c;但合理的锻炼已经被证实是改善患者症状、提高生活质量的有效途径之一。本文旨在为帕金森病患者推荐一些适合的锻炼方法&#xff0c;帮助…

c#未能加载基类System错误 这台计算机上缺少此项目引用的 NuGet 程序包

拷贝代码到另一台计算机运行&#xff0c;打开Form1.cs报错 首先确认package的框架 如果是472&#xff0c;则更换472的框架 打开项目->xx属性&#xff0c;进行修改 如果框架正确&#xff0c;就是未识别到程序包 可以参考&#xff1a; https://www.cnblogs.com/txwtech/p/1…

WPF真入门教程32--WPF数字大屏项目实干

1、项目背景 WPF (Windows Presentation Foundation) 是微软的一个框架&#xff0c;用于构建桌面客户端应用程序&#xff0c;它支持富互联网应用程序&#xff08;RIA&#xff09;的开发。在数字大屏应用中&#xff0c;WPF可以用来构建复杂的用户界面&#xff0c;展示庞大的数据…

day31贪心算法part01| 理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和

**455.分发饼干 ** 视频讲解 | 力扣链接刚开始想到的&#xff0c;但是这样太暴力了&#xff0c;太笨了 class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {// 胃口g 饼干尺寸sint result 0;sort(s.begin(), s.end());…