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

集合(下)Map集合的使用

文章目录

  • 前言
  • 一、Map接口
  • 二、Map接口的实现类
    • 1.HashMap类
    • 2.TreeMap类
  • 总结

前言

       Map集合没有继承Collection接口,不能像List集合和Set集合那样直接使用Collection接口的方法。Map集合其自身通过以key到value的映射关系实现的集合,也有相应的许多方法。类似与函数,Map中不能包含相同的key,每个key只能映射一个value值,value值可以相同。Map集合是指Map接口以及Map接口的所有实现类。


一、Map接口

        Map接口提供了将key映射到value值的对象。一个映射不能包含重复的key,每个key最多只能映射到一个value值。Map集合中允许值对象(value)是null,而且没有个数限制

        Map接口同样提供了集合的常用方法:

Map接口中的常用方法
方法功能描述
put(K key,V value)向集合中添加指定的key与value的映射关系的对象
containsKey(Object key)如果此映射包含指定key的映射关系,则返回ture值
containsValue(Object value)如果有一个或多个key映射到value值,则返回ture值
get(Object key)如果存在一个指定的key对象,则返回对应的value值,否则返回null值
keySet()返回该集合中的所有key对象形成一个Set集合
values()返回该集合中的所有值形成的Colllection集合
size()返回map集合元素长度int值
remove(Object key,Object values)删除该map集合中的指定元素
replace(Object key,Object values)替换该map元素中的指定元素

        示例代码:

import java.util.*;public class MapDemo {public static void main(String[] args) {//创建了一个Person类,构造方法为(String ID,String Name),getID(),getName()用于获取People p1 = new People("101", "李三");People p2 = new People("102", "李四");People p3 = new People("103", "王五"); People p4 = new People("104", "赵六");People p5 = new People("105", "黄七");//以下为HashMap的代码Map<String,String> map = new HashMap<>();map.put(p5.getID(), p5.getName()).map.put(p4.getID(), p4.getName());map.put(p3.getID(), p3.getName());map.put(p2.getID(), p2.getName());map.put(p1.getID(), p1.getName());//以上是对map集合存放数据System.out.println("此map集合长度:"+map.size());System.out.println("ID为105的人是否存在:"+map.containsKey("105"));//使用keySet()方法把key存入Set集合,从而可以使用Set方法中的迭代器Set<String> set = map.keySet();Iterator<String> iterator = set.iterator();while (iterator.hasNext()) { //遍历map集合元素String id=(String)iterator.next();System.out.println("id:"+id+" name:"+map.get(id));}}
}

         运行结果:

二、Map接口的实现类

        Map接口常用的实现类有HashMapTreeMap。建议使用 HashMap类来实现Map集合。HashMap类实现的Map集合添加和删除映射关系效率更高。HashMap是基于哈希表的Map接口的实现,HashMap通过哈希码对其内部的映射关系进行迅速查找;而TreeMap中的映射关系存在一定顺序,如果希望元素排列有序,应该用TreeMap实现Map集合

1.HashMap类

        HashMap类是基于哈希表的Map接口的实现。此实现提供所有可选的映射操纵。允许使用null值和null键,但必须保持键的唯一性。HashMap通过映射关系进行快速查找,但不保证各个元素的排放位置。但是在Java 8之后,HashMap的内部实现进行了优化,使得它能够保持插入顺序。这意味着,当你遍历HashMap的时候,它会按照元素插入的顺序进行输出。

        HashMap类实现Map集合:   

Map<> map = new HashMap<>();

        实例: 

    public static void main(String[] args) {People p1 = new People("101", "李三");People p2 = new People("102", "李四");People p4 = new People("104", "赵六");People p5 = new People("105", "黄七");People p3 = new People("103", "王五"); //以下为HashMap的代码Map<String,String> map = new HashMap<>();map.put(p4.getID(), p4.getName());map.put(p3.getID(), p3.getName());map.put(p2.getID(), p2.getName());map.put(p1.getID(), p1.getName());map.put(p5.getID(), p5.getName());Set<String> set = map.keySet();Iterator<String> iterator = set.iterator();while (iterator.hasNext()) {String id = (String)iterator.next();String name = (String)map.get(id);System.out.println("id:"+id+" name:"+name);}}

        输出结果:

 

2.TreeMap类

        TreeMap类不仅实现了Map接口,还实现了java.util.SortedMap接口,因此,集合中的映射关系具有一定的顺序。但添加、删除和查找映射关系时,不如HashMap效率高。TreeMap不允许键对象为null。

        TreeMap类实现Map接口: 

Map<> map = new TreeMap<>();

        实例: 

import java.util.*;public class MapDemo {public static void main(String[] args) {People p1 = new People("101", "李三");People p2 = new People("102", "李四");People p3 = new People("103", "王五"); People p4 = new People("104", "赵六");People p5 = new People("105", "黄七");//以下为HashMap的代码Map<String,String> map = new TreeMap<>();map.put(p4.getID(), p4.getName());map.put(p3.getID(), p3.getName());map.put(p2.getID(), p2.getName());map.put(p1.getID(), p1.getName());map.put(p5.getID(), p5.getName());Set<String> set = map.keySet();Iterator<String> iterator = set.iterator();while (iterator.hasNext()) {String id = (String)iterator.next();String name = (String)map.get(id);System.out.println("id:"+id+" name:"+name);}}
}

        运行结果:


总结

        以上就是Map集合的相关介绍和简单使用,本文仅仅简单介绍了Map方法,而Map接口提供了大量能使我们快速便捷地处理键与值的函数和方法,有不足或文章错误的地方,欢迎在评论区中指正。

相关文章:

集合(下)Map集合的使用

文章目录 前言一、Map接口二、Map接口的实现类 1.HashMap类2.TreeMap类总结 前言 Map集合没有继承Collection接口&#xff0c;不能像List集合和Set集合那样直接使用Collection接口的方法。Map集合其自身通过以key到value的映射关系实现的集合&#xff0c;也有相应的许多方法。类…...

AAPT: error: resource android:attr/dialogCornerRadius not found.

ERROR:D:\android.gradle\caches\transforms-3\b3b98118f65da38d0ad9da84cfc70a72\transformed\appcompat-1.0.0\res\values-v28\values-v28.xml:5:5-8:13: AAPT: error: resource android:attr/dialogCornerRadius not found. 请帮我看看这个错误是什么意思。我改如何做。 这个…...

数字功放VS模拟功放,选择适合你的音频解决方案

数字功放和模拟功放是音频系统中常用的两种功放技术&#xff0c;适用于不同的音频应用&#xff0c;都具有各自的优势和特点。本文将为您详细介绍数字功放和模拟功放的差异&#xff0c;并帮助您找到适合自己的音频解决方案。 1、数字功放是一种利用数字信号处理技术的功放。它将…...

5.88 BCC工具之tcpsynbl.py解读

一,工具简介 tcpsynbl工具以直方图的形式显示SYN到达时的TCP SYN积压大小。这可以让我们了解应用程序距离达到积压限制并丢弃SYN(导致SYN重传产生性能问题)还有多远。 TCP SYN 数据包则通常用于启动 TCP 三次握手过程的第一次握手。 二,代码示例 #!/usr/bin/env python…...

GVRP实现vlan的自动创建和注册

拓扑图 资源已上传 流程 第一、每台交换机的全局及端口下使能GVRP功能 第二、配置交换机的二层连通性&#xff0c;交换机某些端口配置Trunk端口&#xff0c;并允许相应的vlan通过 第三、在交换机4和5配置静态vlan100&#xff0c;然后查看1和3交换机是否有vlan100的定义&…...

Oracle VM VirtualBox修改磁盘大小

一、 修改虚拟机磁盘大小 先把虚拟机停掉。再增加磁盘大小。 路径中有空格的用""包起来。 D:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyhd "D:\Program Files\VirtualBox VMs\mycentos\mycentos.vdi" --resize 30000 0%...10%...20%...3…...

【嵌入式硬件】步进电机

1.步进电机简介 1.1步进电机基本原理 步进电机的英文是stepping motor。step的中文意思是行走、迈步。所以仅从字面上我们就可以得知,步进电机就是一步一步移动的电动机。说的官方一点儿,步进电机是一种将电脉冲信号转换成相应角位移或者线位移的电动机(直线电机)。下图为…...

FlyControls 是 THREE.js 中用于实现飞行控制的类,它用于控制摄像机在三维空间中的飞行。

demo演示地址 FlyControls 是 THREE.js 中用于实现飞行控制的类&#xff0c;它用于控制摄像机在三维空间中的飞行。 入参&#xff1a; object&#xff1a;摄像机对象&#xff0c;即要控制的摄像机。domElement&#xff1a;用于接收用户输入事件的 HTML 元素&#xff0c;通常…...

【Java程序设计】【C00366】基于(JavaWeb)Springboot的纹理生产图片系统(有论文)

TOC 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;博客中有上百套程序可供参考&#xff0c;欢迎共同交流学习。 项目简介 项目获取 &#x1f345;文末点击卡片…...

编译原理Lab. 1 初代编译器实验说明和要求

目录 Lab. 1 初代编译器实验说明和要求一、初代编译器功能描述二、初代编译器文法要求三、初代编译器测试样例四、初代编译器提交要求五、初代编译器实验测试框架说明 代码与思路 Lab. 1 初代编译器实验说明和要求 一、初代编译器功能描述 初代编译器将 C 语言顺序语句序列翻…...

python判断工作日,节假日

一、概述 需要判断一个日期是否为工作日&#xff0c;节假日。 找到一个现成的插件&#xff0c;蛮好用的。 插件介绍 https://pypi.org/project/chinesecalendar/ 判断某年某月某一天是不是工作日/节假日。 支持 2004年 至 2020年&#xff0c;包括 2020年 的春节延长。 兼容…...

练习4-权重衰减(李沐函数简要解析)

环境:练习1的环境 代码详解 0.导入库 import torch from torch import nn from d2l import torch as d2l1.初始化数据 这里初始化出train_iter test_iter 可以查一下之前的获取Fashion数据集后的数据格式与此对应 n_train, n_test, num_inputs, batch_size 20, 100, 200, …...

websocket 中 request-line 中的URI编码问题

首先&#xff0c;request-line组成如下&#xff1a; Request-Line Method SP Request-URI SP HTTP-Version CRLF 在 rfc6455 规范的 5.1.2 Request-URI 中&#xff0c;有这样的描述&#xff1a; The Request-URI is transmitted in the format specified in section 3.2.1. …...

为何ChatGPT日耗电超50万度?

看新闻说&#xff0c;ChatGPT每天的耗电量是50万度&#xff0c;国内每个家庭日均的耗电量不到10度&#xff0c;ChatGPT耗电相当于国内5万个家庭用量。 网上流传&#xff0c;英伟达创始人黄仁勋说&#xff1a;“AI的尽头是光伏和储能”&#xff0c;大佬的眼光就是毒辣&#xff…...

__init__.py 的作用

在 Python 中&#xff0c;包含一个名为 __ init __.py 的文件的目录被称为一个包&#xff08;package&#xff09;。 __ init __.py 文件的作用有以下几点&#xff1a; 指示包含该文件的目录是一个 Python 包&#xff1a;当 Python 导入一个包时&#xff0c;会查找该包所在目录…...

Redis到底是多线程还是单线程?

Redis6.0之前&#xff1a;是单线程模式。 Redis6.0之后&#xff1a;Redis的IO线程是多线程&#xff0c;worker线程是单线程。 Redis6.0之前&#xff1a;单线程 Redis6.0之后&#xff1a;Redis的IO线程是多线程&#xff0c;worker线程是单线程。...

JAVA 100道题(18)

18.实现一个除法运算的方法&#xff0c;能够处理被除数为零的情况&#xff0c;并抛出异常。 在Java中&#xff0c;你可以创建一个除法运算的方法&#xff0c;该方法接受两个整数作为参数&#xff0c;分别代表被除数和除数。如果被除数为零&#xff0c;你可以抛出一个自定义的异…...

【C++】每日一题 137 只出现一次的数字

给你一个整数数组 nums &#xff0c;除某个元素仅出现 一次 外&#xff0c;其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。 #include <vector>int singleNumber(std::vecto…...

RAG进阶笔记:RAG进阶

1 查询/索引部分 1.1 层次索引 创建两个索引——一个由摘要组成&#xff0c;另一个由文档块组成分两步进行搜索&#xff1a;首先通过摘要过滤出相关文档&#xff0c;接着只在这个相关群体内进行搜索 1.2 假设性问题 让LLM为每个块生成一个假设性问题&#xff0c;并将这些问…...

《论文阅读》带边界调整的联合约束学习用于情感原因对提取 ACL 2023

《论文阅读》带边界调整的联合约束学习用于情感原因对提取 前言简介Clause EncoderJoint Constrained LearningBoundary Adjusting损失函数前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲击键盘~ 今天为大家带来的是《Joint Cons…...

【微服务】接口幂等性常用解决方案

一、前言 在微服务开发中&#xff0c;接口幂等性问题是一个常见却容易被忽视的问题&#xff0c;同时对于微服务架构设计来讲&#xff0c;好的幂等性设计方案可以让程序更好的应对一些高并发场景下的数据一致性问题。 二、幂等性介绍 2.1 什么是幂等性 通常我们说的幂等性&…...

RocketMQ学习笔记:零拷贝

这是本人学习的总结&#xff0c;主要学习资料如下 马士兵教育rocketMq官方文档 目录 1、零拷贝技术1.1、什么是零拷贝1.2、mmap()1.3、Java中的零拷贝 1、零拷贝技术 1.1、什么是零拷贝 使用传统的IO&#xff0c;从硬盘读取数据然后发送到网络需要经过四个步骤。 通过DMA复…...

3.26日总结

1.Fliptile Sample Input 4 4 1 0 0 1 0 1 1 0 0 1 1 0 1 0 0 1 Sample Output 0 0 0 0 1 0 0 1 1 0 0 1 0 0 0 0 题意&#xff1a;在题目输入的矩阵&#xff0c;在这个矩阵的基础上&#xff0c;通过最少基础反转&#xff0c;可以将矩阵元素全部变为0&#xff0c;如果不能达…...

应用日志集成到ElasticSearch

1、阿里云sls平台集成日志 阿里sls集成日志步骤 2、filebeat 收集到指定es 安装docker容器 Docker安装 拉取镜像&#xff1a; docker pull elastic/filebeat:7.5.1启动&#xff1a; docker run -d --namefilebeat elastic/filebeat:7.5.1拷贝容器中的数据文件到宿主机&a…...

MySQL多表联查函数

1 多表联查 1.1 表之间的关系 表和表的关系有: 一对一 老公 --> 老婆 , 人 ---> 身份证/户口本 一对多 皇帝 --> 妻妾 , 人 ---> 房/车 多对多 订单 --> 商品 1.2 合并结果集 合并结果集,是将多表查询的结果纵向合并 语法: select field1,field2 from t1 un…...

JAVAEE—实现多线程版本的定时器

文章目录 什么是定时器定时器的概念定时器的简单应用和介绍代码示例 定时器的代码解析定时器在执行任务的时候是创建了一个线程去执行吗&#xff1f;为什么叫做扫描线程呢&#xff1f;执行完任务之后代码就暂停了不自动结束吗&#xff1f; 手撕定时器demo相对时间与绝对时间Myt…...

KY228 找位置(用Java实现)

描述 对给定的一个字符串&#xff0c;找出有重复的字符&#xff0c;并给出其位置&#xff0c;如&#xff1a;abcaaAB12ab12 输出&#xff1a;a&#xff0c;1&#xff1b;a&#xff0c;4&#xff1b;a&#xff0c;5&#xff1b;a&#xff0c;10&#xff0c;b&#xff0c;2&…...

物联网边缘网关有哪些优势?-天拓四方

随着物联网技术的快速发展&#xff0c;越来越多的设备接入网络&#xff0c;数据交互日益频繁&#xff0c;对数据处理和传输的要求也越来越高。在这样的背景下&#xff0c;物联网边缘网关应运而生&#xff0c;以其低延迟、减少带宽消耗、提高数据质量和安全性等优势&#xff0c;…...

【C++】6-2 交换函数2 分数 10

6-2 交换函数2 分数 10 全屏浏览 切换布局 作者 刘利 单位 惠州学院 根据题目需求&#xff0c;编写一个交换函数Swap。 裁判测试程序样例&#xff1a; #include <iostream> using namespace std; class pen{private:string brand;string color;double price;publi…...

kafka 01

01....