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…

python内存池机制_看过来啦!教你用Python进行内存管理

原标题:看过来啦!教你用Python进行内存管理现在学Python的小伙伴有很多啦!Python语言的发展前景也是有目共睹。小助手今天为大家带来了Python中内存管理的方法,一起来学习一下吧~Python中的内存管理是从三个方面来进行的,一对象的…

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

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

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

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

layui表头样式_layui中table表头样式修改方法

如下所示:layui.use(table, function () {var table layui.table;table.render({elem: #desTable, url: ${ctx}/alarm/queryEventShowScatter, even: true, page: { //支持传入 laypage 组件的所有参数(某些参数除外,如:jump/elem) - 详见文…

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

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

配置文件详解

[123456localhost Desktop]$ redis-server /etc/redis/redis.conf[123456localhost Desktop]$ redis-cli 得到启动Redis的路径127.0.0.1:6379> config get dir1) "dir"2) "/home/123456/Desktop" 得到requirepass127.0.0.1:6379> config get require…

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》。凭籍本文,回顾一下两百年来的科学史,看…

wxpython实例源码_wxpython中复选框的基本使用源码实例

#codingutf-8import wxclass MyFrame(wx.Frame):def __init__(self):wx.Frame.__init__(self,None,-1,"多模测试热补丁工具",size (800,600))panel wx.Panel(self)self.checkbox1 wx.CheckBox(panel,-1,"CCC",(60,20),(200,20)) #复选框1self.checkbox2…

mysql dml影响查询_MySql--DML语句、简单查询和子查询

简要的将MySql中的insert、update、delete和select总结一下。/*****************************DML语言操作数据表**************************************/一、insert语句1、insert value形式insert into table_name value(1, 小明);2、insert set形式insert into table_name se…

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

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

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

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

『电子书』分享一波码农必备编程开发类书籍[转]

分享一些书籍 看到书籍很多,感觉很不错,就收藏下来了,是百度盘的连接,失效的可以评论一下以此更新一下连接. 书籍清单 Python编程快速上手 细说PHP(第2版) Python核心编程(第3版) Linux命令行与shell脚本编程大全(第3版) python高…

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

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

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

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

NB-IoT与eMTC差异全解析

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

Laravel 代码开发最佳实践(持续更新)

http://laravelacademy.org/post/8464.html转载于:https://www.cnblogs.com/cxscode/p/8710149.html

设计模式--外观模式

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

php mysql会员注册_PHP实现会员注册系统

分享一个基于PHP的非常简单基础的注册系统,为了减轻难度没有使用Cookie和Session,数据库大家按照自己需求更改,有问题欢迎联系我。index.htmlTitle注册分开一下登录join_us.html注册页面,发一个表单给add_member.php,使…