c++ map 自定义排序_Java学习笔记:Map集合介绍

在介绍它之前先来看看再API文档中是如何介绍它的,看图片:

a8006135fc6d6d31ded488aa062bb36d.png

由图片可以看出,Map属于双列集合,每次可以添加一对数据,并且这两个数据具有映射关系。

单列集合和双列集合区别

e81077c0651080aa08947987e74d87f8.png

一、Map继承体系

e77b963fbf14e570fd3b0033d2de32a6.png

1.HashMap:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。哈希表控制键,键唯一。

2.LinkedHashMap:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。

3.TreeMap:TreeMap集合和Map相比没有特有的功能,底层的数据结构是红黑树;可以对元素的键进行排序,排序方式有两种:自然排序和比较器排序

4.利弊比较:

Hashtable被HashMap集合取代了 安全的,但是效率比HashMap低

ConcurrentHashMap属于多线程安全,效率低 比Hashtable效率高

二、Map接口的方法介绍

Map接口中定义了很多方法,常用的如下:

public V put(K key, V value):

把指定的键与指定的值添加到Map集合中。 说明:(1)执行put添加数据的时候,如果新添加的键不存在,那么此时直接添加,并返回null(2)执行put添加数据的时候,如果新添加的键存在,那么新添加的value覆盖之前旧的value,并返回旧的value

public V remove(Object key):

把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。

public V get(Object key):

根据指定的键,在Map集合中获取对应的值。

public SetkeySet():

获取Map集合中所有的键,存储到Set集合中。

public Set> entrySet():

获取到Map集合中所有的键值对对象的集合(Set集合)。说明:该方法表示获取Map集合中的所有的键值对,存放到单列集合Set中,键值对属于Map.Entry类型

public boolean containKey(Object key):

判断该集合中是否有此键。 如果包含返回true,否则返回false

 int size()

返回此映射中的键-值映射关系数。 集合长度

代码演示:

6f5819b37ded473d6072a1779280a0f5.png

65a0a911067c75974e95a31e18e16fbb.png

accce0246052c2eb740e4c8c20f091da.png

三、Map集合的遍历

1.使用keySet方法遍历(了解)

需要使用的方法:

public V get(Object key):

根据指定的键,在Map集合中获取对应的值。

public SetkeySet():

获取Map集合中所有的键,存储到Set集合中

f509bc31040a1fe2bfac41bbb52a864c.png

35bdfd405ec741c84fa9f1c9082d251e.png

2.使用entrySet方式遍历Map集合(掌握)

使用方法:

Map接口中的方法:

public Set> entrySet(): 获取到Map集合中所有的键值对对象的集合(Set集合)。

    说明:该方法表示获取Map集合中的所有的键值对,存放到单列集合Set中,   键值对属于Map.Entry

使用Map.Entry接口中的方法:

K getKey() 返回与此项对应的键。

V getValue()  返回与此项对应的值。

22b88cf517be6462a3da86cc01ad678b.png

45572911737026745402724757edde45.png四、Map常用子类

1.HashMap类

HashMap作为最常用集合之一,继承自Map。JDK8的HashMap实现与JDK7不同,新增了红黑树作为底层数据结构,结构变得复杂,效率变得更高。为满足自身需要,也重新实现了很多Map中的方法。

HashMap类底层是一个哈希表数据结构,控制键。要求HashMap键位置的对象所属类必须重写hashCode和equals方法。

929489bedf7154c9dbe85277f284f16c.png

小结:

1.HashMap属于jdk1.2之后才有的,替换了Hashtable,提高效率

2.底层哈希表数据结构控制键,所以要求键位置的对象所属类必须重写hashCode和equals方法

3.HashMap集合的键和值都可以是null,但是键位置只能是一个null

2.Hashtable类

Hashtable从jdk1.0就有了,它的安全性较高,但是效率低。底层是哈希表数据结构,控制键。该集合的键和值不允许是null,而从1.2开始后被HashMap取代了,HashMap效率更高。

代码演示:

a28033cf590be31bf97fdab51370ed67.png

3ef50b94bc379cc0874d2a8b3573b08c.png

3.LinkedHashMap

底层基于两个数据结构,分别为哈希表和双链表。哈希表的作用是存储数据保证数据唯一;双链表的作用为保证数据存储有序。

代码演示:

0937c29b9a023de57094f373ce56b803.png

4.TreeMap类

TreeMap底层基于红黑树结构,控制键,可以对键进行排序。具有排序方法看下面的构造方法:

1) TreeMap() 对键是大小升序,非自定义类(String Integer)按照大小升序排序

2)TreeMap(Comparator comparator) 根据键按照指定规则进行排序,

           参数:comparator属于自定义比较器接口Comparator类型,具体的排序规则由我们实现该接口的排序方法指定:

    int compare(T o1, T o2) 

           o1 - o2 升序

           o2 - o1 降序

代买演示:

298c46fe8e9268866e0d38e8fe55c2ca.png

a4aa024adaf4a647bee417838c6c3701.png

4df11d3032cc1f38bc2fd260b2e969bf.png

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

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

相关文章

《智能网联汽车技术路线图 2.0》重磅发布

全文共计3644字,预计阅读时间8分钟来源 | 国汽智联(转载请注明来源)编辑 | 蒲蒲11月11日,由北京市人民政府、工业和信息化部、公安部、交通运输部、中国科学技术协会共同主办的2020世界智能网联汽车大会召开。大会现场&#xff0c…

毕设ssm商城系统_ssm商城系统(爱淘淘购物)项目源码

ssm商城系统(爱淘淘购物)项目演示本系统采用SSM架构来搭建。服务器:tomcat7java虚拟机:jdk1.7数据库:mysql前端:Vue Bootstrap管理员用户:root root普通用户:jack 123访问路径:http://localho…

科学就是要勇于承认错误:十大错误科学结论盘点

来源: 学术头条人们不会迷信权威,但是大部分会相信“科学”。如何科学地饮食?如何科学地工作?如何科学地休息?“科学”两个字成了人们确认自己正确生活的最大保障。但如果“科学”不正确,那又会怎样呢&…

怎么改变表单option标签直接字体大小_不起眼却非常重要的表单交互

表单是什么?是用户和app之间的对话。作为人机交互的一种重要入口,一个好的数据输入方式是很有必要去考虑的。但现实中,我们大多设计师和产品经理前期设计的时候就没有太多的考虑,到最后开发的时候就会发现问题,然后就草…

mysql-front特点_Navicat for MySQL与MySQL-Front比较 [图文]

MySQL GUI工具很多,本文就常用的Navicat for MySQL与MySQL-Front的特色功能做一个详细介绍与比较。(一)MySQL-FrontMySQL-FronMySQL GUI工具很多,本文就常用的Navicat for MySQL与MySQL-Front的特色功能做一个详细介绍与比较。(一)MySQL-FrontMySQL-Fron…

这是关于物理学的最强科普

“唯有宇宙和人类的愚蠢是永恒的”文章来源:撕蛋公众号这是关于物理学的最强科普(完整版) 本文素材主要摘录自加来道雄的《Hypersapce》和丘成桐的《The Shape of Inner Space》。凭籍本文,回顾一下两百年来的科学史,看…

pip 不是内部或外部命令 也不是可运行的程序_QT之程序打包发布

1.引言QT开发完之后,如果直接把exe文件发给别人,是没法直接用的,因为会提示缺少很多库,一种方法是把这些库拷贝出来,一起发过去,但是这样不方便且文件很大,所以需要一种文件打包发布的方法。2.环…

华为汪涛:定义5.5G,构建美好智能世界

来源:华为以下是汪涛演讲全文:尊敬的各位来宾,大家早上好!一年来,华为5G解决方案被更多的客户所选择,为世界各地社会经济的可持续发展创造价值,这些都离不开全球客户对我们的关心和支持&#xf…

mysql排序规则错误_MySQL中“非法混合排序规则”错误的疑难解答

阿波罗的战车更改字符串的一个(或两者)的排序规则以使它们匹配,或者添加一个COLLATE从句到你的表情。这“校对”到底是什么?如下文所述字符集和排序规则:A 字符集是一组符号和编码。一个校对用于比较字符集中字符的一组规则。让我们用一个假想字符集的例…

mybatis代码自动生成器_最近很火的文章自动生成器,python源码公开了(内附python代码)

学了python,但是又不知道可以用来干嘛。开发一个计算器?太low了。开发一个网站?感觉网站涉及太多知识点,一个人搞不定。不用慌,本文介绍一个最近很火的一个文章自动生成器,它是用python写的,能够…

NB-IoT与eMTC差异全解析

来源:北京物联网智能技术应用协会NB-IoT和eMTC同属于蜂窝物联网,也同时具备了蜂窝物联网的“3C”特征:•Coverage 增强覆盖•Consumption 低功耗•Cost 低成本为了满足“3C”目标,NB-IoT和eMTC的实现方式也有不同之处,…

设计模式--外观模式

实验12:外观模式 本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解外观模式的动机,掌握该模式的结构; 2、能够利用外观模式解决实际问题。 [实验任务]:计算机开启 在计算机主机(Main…

德国颁发抄袭大奖,中国包揽前10名拿了大满贯!

来源:钱塘大数据 昨天看到一则来自欧洲的新闻,实在是震惊!德国设立了一个奖项,中国包揽了前10名,但我们却高兴不起来,还很难为情。因为这个奖,是为了反对山寨而设立的剽窃奖。获得这样的奖&…

11大领域148个热点和新兴前沿发布!有你的化学与材料研究方向吗?

来源:科学网 作者:郑金武11月13日,中国科学院科技战略咨询研究院、中国科学院文献情报中心与科睿唯安联合向全球发布了《2020研究前沿》报告。报告基于2014年-2019年的论文数据,遴选展示了在农业科学、植物学和动物学&#xff0c…

List注意啊

java.unit工具类,例如:Map、List等 java.awt图形绘制类,例如:list组件可以为用户提供了一个可滚动的文件列表选项,可设置list使其为用户提供单项或多项选择 我在第一次使用List的时候,包导入了第二个&#…

git idea 图形化_Git大全,你所需要的Git资料都在这里

不管怎样,Git已经成为事实上的版本管理工具的王者,之前的CVS被SVN吃掉了,现如今SVN的大好河山也被Git蚕食了大半,作为开发者的你,如果还不能够熟练的使用Git来管理你的代码,后果将会很严重,何况…

是否同一棵二叉搜索树

给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们…

修改软件许可证使用时间_阮一峰:为什么开源数据库改变许可证?

CockroachDB 是一个开源的分布式数据库,最近改变了代码授权,放弃了 Apache 许可证。许多开源数据库这一两年都改变了授权,比如 Confluent、Elastic 、MongoDB、Redis Labs、TimescaleDB。本文分析这种现象。一、CockroachDB 的许可证变更Cock…

线程 sleep 取消_C/C++ 多线程机制

一、C/C多线程操作说明C/C多线程基本操作如下: 1. 线程的建立结束 2. 线程的互斥和同步 3. 使用信号量控制线程 4. 线程的基本属性配置 在C/C代码编写时,使用多线程机制,首先需要做的事情就是声明引用,具体如下:#inclu…

事务java_Java事务之一——Java事务的基本问题

Java中的事务处理有多简单?在使用EJB时,事务在我们几乎察觉不到的情况下发挥着作用;而在使用Spring时,也只需要配置一个TransactionManager,然后在需要事务的方法上加上Transactional注解就行了。Java的事务处理之所以…