集合(下)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接口提供了大量能使我们快速便捷地处理键与值的函数和方法,有不足或文章错误的地方,欢迎在评论区中指正。

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

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

相关文章

CUMT linux操作系统课程设计 任务2

先说题目: 调试Linux内核的启动过程&#xff0c;并在Linux 0.11内核进入保护模式之前添加提示信息 //这里吐槽一下&#xff0c;学校发的文档让你用断点去查看运行根本无法操作&#xff0c;报错如下&#xff1a; 所以别管这个报错&#xff0c;先跟着我来 第一题&#xff0c;调试…

各城市宗族文化姓氏占比数据

各城市宗族文化姓氏占比数据 1、指标&#xff1a;省份代码、所属省份、城市代码、所属城市、第1大姓氏、第2大姓氏、第3大姓氏、宗族文化强度 2、方法说明&#xff1a; 根据2005年全国1%的人口调查数据计算。其中第1大姓氏第一大姓人口数/总人口数&#xff0c;宗族文化强度(…

一文700字从0到1教你实现Jmeter分布式压力测试!

之前写过用jmeter做接口测试的文章&#xff0c;本篇我们继续介绍下用jmeter做分布式压力测试的例子。 用jmeter做压力测试&#xff0c;如果只用一台机器&#xff0c;有鉴于线程数的限制和一台机器的性能&#xff0c;可能无法满足压力测试的实际需求&#xff0c;解决这个问题&a…

力扣--并查集1631.最小体力消耗路径

这题将图论和并查集联系起来。把数组每个位置看成图中的一个节点。 这段代码的主要思路是&#xff1a; 遍历地图中的每个节点&#xff0c;将每个节点与其相邻的下方节点和右方节点之间的边加入到边集合中&#xff08;因为从上到下和从下到上他们高度绝对值一样的&#xff0c;…

OpenHarmony之媒体组件模块简介

源码 本文基于OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;3.2 Release源码foundation目录下的player_framework&#xff0c;在OpenHarmony 2.0 Release版本当中&#xff0c;这个模块的名字叫媒体组件模块&#xff0c;为了方便理解我们在本文中仍旧延…

VR全景展示:传统制造业如何保持竞争优势?

在结束不久的两会上&#xff0c;数字化经济和创新技术再度成为了热门话题。我国制造产业链完备&#xff0c;但是目前依旧面临着市场需求不足、成本传导压力加大等因素影响&#xff0c;那么传统制造业该如何保持竞争优势呢&#xff1f; 在制造行业中&#xff0c;VR全景展示的应用…

Query2doc——Query改写

大模型LLM最近一年比较火&#xff0c;但是可能由于数据量较大&#xff0c;存在一些矛盾的数据或者质量差的数据&#xff0c;就会导致大模型存在幻视情况&#xff0c;即存在严重不符合事实的情况。随着之而来&#xff0c;RAG&#xff08;Retrieval Augmented Generation&#xf…

计算机组成原理(超详解!!) 第三节 运算器(浮点加减乘)

1.浮点加法、减法运算 操作过程 1.操作数检查 如果能够判断有一个操作数为0&#xff0c;则没必要再进行后续一系列操作&#xff0c;以节省运算时间。 2.完成浮点加减运算的操作 (1) 比较阶码大小并完成对阶 使二数阶码相同&#xff08;即小数点位置对齐&#xff09;…

windows@浏览器主页被篡改劫持@360篡改主页@广告和弹窗设置@极速版

文章目录 360篡改浏览器主页方法1锁定浏览器主页 方法2注册表修改 360广告和弹窗360极速版 小结 360篡改浏览器主页 如果您使用360,且不想卸载它,那么当你启动360后,它可能会篡改你的浏览器(比如edge)的主页start page为360早期可能是通过修改快捷方式的target等属性,但是现在…

《剑指 Offer》专项突破版 - 面试题 93 : 最长斐波那契数列(C++ 实现)

题目链接&#xff1a;最长斐波那契数列 题目&#xff1a; 输入一个没有重复数字的单调递增的数组&#xff0c;数组中至少有 3 个数字&#xff0c;请问数组中最长的斐波那契数列的长度是多少&#xff1f;例如&#xff0c;如果输入的数组是 [1, 2, 3, 4, 5, 6, 7, 8]&#xff0…

C++模版(基础)

目录 C泛型编程思想 C模版 模版介绍 模版使用 函数模版 函数模版基础语法 函数模版原理 函数模版实例化 模版参数匹配规则 类模版 类模版基础语法 C泛型编程思想 泛型编程&#xff1a;编写与类型无关的通用代码&#xff0c;是代码复用的一种手段。 模板是泛型编程…

【前端Vue】Vue3+Pinia小兔鲜电商项目第3篇:静态结构搭建和分类实现,1. 整体结构创建【附代码文档】

Vue3ElementPlusPinia开发小兔鲜电商项目完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;认识Vue3&#xff0c;使用create-vue搭建Vue3项目1. Vue3组合式API体验,2. Vue3更多的优势,1. 认识create-vue,2. 使用create-vue创建项目,1. setup选项的写法和执行…

【数据结构与算法】java有向带权图最短路径算法-Dijkstra算法(通俗易懂)

目录 一、什么是Dijkstra算法二、算法基本步骤三、java代码四、拓展&#xff08;无向图的Dijkstra算法&#xff09; 一、什么是Dijkstra算法 Dijkstra算法的核心思想是通过逐步逼近的方式&#xff0c;找出从起点到图中其他所有节点的最短路径。算法的基本步骤如下&#xff1a;…

应用层协议 - HTTP

文章目录 目录 文章目录 前言 1 . 应用层概要 2. WWW 2.1 互联网的蓬勃发展 2.2 WWW基本概念 2.3 URI 3 . HTTP 3.1 工作过程 3.2 HTTP协议格式 3.3 HTTP请求 3.3.1 URL基本格式 3.3.2 认识方法 get方法 post方法 其他方法 3.3.2 认识请求报头 3.3.3 认识请…

MyBatis是纸老虎吗?(七)

在上篇文章中&#xff0c;我们对照手动编写jdbc的开发流程&#xff0c;对MyBatis进行了梳理。通过这次梳理我们发现了一些之前文章中从未见过的新知识&#xff0c;譬如BoundSql等。本节我想继续MyBatis这个主题&#xff0c;并探索一下MyBatis中的缓存机制。在正式开始梳理前&am…

如何解决kafka rebalance导致的暂时性不能消费数据问题

文章目录 背景思考答案排它故障转移共享 背景 之前在review同组其它业务的时候&#xff0c;发现竟然把kafka去掉了&#xff0c;问了下原因&#xff0c;有一个单独的服务&#xff0c;我们可以把它称为agent&#xff0c;就是这个服务是动态扩缩容的&#xff0c;会采集一些指标&a…

使用C++实现一个简单的日志功能

日志对于一些大一些的项目来说&#xff0c;可以在项目运行出现问题时更好的帮助 项目的维护人员快速的定位到问题出现的地方并且知道出现问题的原因&#xff0c; 并且日志也可以帮助程序员很好的进行项目的Debug&#xff0c;那么今天我就来实 现一个C编写的一个简单的日志功能。…

深度学习中常用计算距离的几种算法对比与python实现

前言 距离度量在许多机器学习算法中扮演着至关重要的角色&#xff0c;无论是监督学习还是无监督学习。选择适当的距离度量可以显著影响模型的性能。 在高维数据集中&#xff0c;欧几里得距离可能会受到所谓的“维度诅咒”的影响&#xff0c;因为随着维度的增加&#xff0c;数…

海外媒体软文发稿:谷歌关键词优化细分人群成功案例,突破海外市场!

海外媒体软文发稿&#xff1a;谷歌关键词优化细分人群成功案例&#xff0c;突破海外市场&#xff01; 引言 在全球化的时代&#xff0c;海外市场对于企业的发展至关重要。而在海外市场中&#xff0c;互联网媒体的作用不可忽视。本篇教程将介绍如何通过谷歌关键词优化细分人群…

Spring设计模式-实战篇之单例模式

实现案例&#xff0c;饿汉式 Double-Check机制 synchronized锁 /*** 以饿汉式为例* 使用Double-Check保证线程安全*/ public class Singleton {// 使用volatile保证多线程同一属性的可见性和指令重排序private static volatile Singleton instance;public static Singleton …