Map - 与君初相识
前言
生活中,我们常会看到这样一种集合:IP地址与主机名,身份证号与个人等,这种一 一对应的关系,就叫做映射。Java提供了专门的集合类用来存放这种对应关系的对象,即 java.util.Map 接口。
Map 接口下的集合与 Collection 接口下的集合,它们存储数据的形式不同,Collection 接口定义了单列集合规范,每次存储一个元素;而Map接口定了的是双列集合的规范,每次存储一对元素。
Collection 中的集合,元素是孤立存在的(单身狗),向集合中存储元素采用一个个元素的方式存储。
Map中的集合,元素是成对存在的(顶级狗粮),每个元素由键和值两部分组成,通过键可以找到对应的值。
Collection 中的集合称为单列集合,Map 中的集合称为双列集合。需要注意的是,Map中的集合不能包含重复的键,值可以重复,而且每个键只能对应一个值。

Map常用子类
Map有多个子类,这里主要讲HashMap集合、LinkedHashMap集合。
- HashMap:存储数据采用的是哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode() 方法、equals() 方法。
- LinkedHashMap:HashMap下有个子类LinkedHashMap,存储数据采用哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
Tip:Map接口中的集合都是两个泛型变量,在使用时,要为两个泛型变量赋予数据类型。两个泛型变量的数据类型可以相同,也可以不同。
Map接口中的常用方法:
Map接口中定义了很多方法,常用的有:
- put(K key, V value) 把指定的键和值添加到Map集合中。
- remove(Object key) 把指定的键所对应的键值对元素从Map集合中删除,返回被删除元素的值。
- get(Object key) 根据指定的键, 在Map集合张获取对应的值。
- Set<K> keySet() 获取Map集合中所有的键, 存储到Set集合中。
- Set<Map.Entry<K, V>> entrySet() 获取到Map集合中所有的键值对对象的集合(Set集合)。
Tip : 使用put()方法时, 若指定的键 (key) 在集合中没有, 则没有这个键对应的值, 返回null , 并把指定的键值添加到集合中;
若指定的键(key) 在集合中存在, 则返回值为集合中键对应的值(该值替换前的值) , 并把指定键所对应的值, 替换成指定的新值。
Map集合遍历键找值方式
键找值 , 即通过元素中的键, 获取键所对应的值。
- 获取Map中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键。方法提示: keyset()。
- 遍历键的Set集合,得到每一个键。
- 根据键,获取键所对应的值。方法提示: get(K key)
Entry键值对对象
我们已经知道, Map 中存放的是两种对象,一种称为key(键),一种称为value(值),它们在在 Map 中是一 一对应关系,这一对对象又称做 Map 中的一个 Entry(项) 。 Entry 将键值对的对应关系封装成了对象。即键值对对象,这样我们在遍历 Map 集合时,就可以从每一个键值对( Entry )对象中获取对应的键与对应的值。
既然Entry表示了一对键和值,那么也同样提供了获取对应键和对应值得方法:
- public K getKey() :获取Entry对象中的键。
- public V getValue() :获取Entry对象中的值。
在Map集合中也提供了获取所有Entry对象的方法:
- public Set<Map.Entry<K,V>> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集合)。
Map集合遍历键值对方式
键值对方式:即通过集合中每个键值对(Entry)对象,获取键值对(Entry)对象中的键与值。
- 获取Map集合中,所有的键值对(Entry)对象,以Set集合形式返回。方法提示 : entrySet() 。
- 遍历包含键值对(Entry)对象的Set集合,得到每一个键值对(Entry)对象。
- 通过键值对(Entry)对象,获取Entry对象中的键与值。 方法提示 : getkey() 、getValue()。

Tip : Map集合不能直接使用迭代器或者 foreeach 进行遍历 , 但是转成 Set 之后就可以使用了。
注:这篇简单写些Map集合的知识,后面再把HashMap写一写。
Map - 与君初相识的更多相关文章
- 初相识|performance_schema全方位介绍
初相识|performance_schema全方位介绍 |导 语 很久之前,当我还在尝试着系统地学习performance_schema的时候,通过在网上各种搜索资料进行学习,但很遗憾,学习的效果并不 ...
- 我和python的初相识
认识Python是大二的选修 单纯只是想赚学分而已 后来觉得越来越有趣. 一.python简介 简单来说Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言.Python 的设 ...
- audacity 做音频分析之--初相识
软件介绍: Audacity是一个跨平台的声音编辑软件,用于录音和编辑音频,是自由.开放源代码的软件.可在Mac OS X.Microsoft Windows.GNU/Linux和其它操作系统上运作. ...
- 神经网络架构PYTORCH-初相识(3W)
who? Python是基于Torch的一种使用Python作为开发语言的开源机器学习库.主要是应用领域是在自然语言的处理和图像的识别上.它主要的开发者是Facebook人工智能研究院(FAIR)团队 ...
- Java 初相识
Java是如何出现的呢?这就要回到1991年,那时候随着单片机的发展,出现了很多微型的系统,Sun公司在这个时候就成立的一个项目组,成员就有我们熟知的“Java之父” 詹姆斯·高斯林,起初的目标是为了 ...
- 3.Spring Cloud初相识--------Ribbon客户端负载均衡
前言: 在生产环境中,未避免单点故障,每个微服务都会做高可用部署. 通白的说,就是每一个一模一样的服务会根据需求提供多分在多台机器上. 那么在大并发的情况下,如何分配服务可以快速得到响应,就成为了我们 ...
- NetworkX初相识
听说NetworkX是一个很牛的复杂网络研究的工具,就来试一下吧. import networkx as nx G= nx.Graph()#建立一个空白的图 G.add_node("node ...
- 6.Spring Cloud初相识-------Zool路由
前言: 在生产环境中,我们不可能将每个服务的真实信息暴漏出去,因为这样太不安全. 我们会选择使用路由代理真实的服务信息,由它负责转发给真实的服务. 新建一个Zool: 1.添加依赖 <?xml ...
- 5.Spring Cloud初相识-------Hystrix熔断器
前言: 1.介绍Hystrix 在一个分布式系统里,许多依赖不可避免的会调用失败,比如超时.异常等,如何能够保证在一个依赖出问题的情况下,不会导致整体服务失败,这个就是Hystrix需要做的事情.Hy ...
随机推荐
- [LC] 23. Merge k Sorted Lists
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. E ...
- django框架进阶-中间件-长期维护
################## 为什么使用中间件? ####################### 先说几个需求, 1,url的白名单,url=[ "XX"] ...
- PLL到底是个啥么东西呢?
——————————————————更新于20180826———————————————————————————— PLL:完成两个电信号的相位同步的自闭环控制系统叫锁相环.用电压控制延时,用到了VC ...
- labview状态机
状态机主要由3部分组成,包括一个while循环,一个条件结构,以及while循环的移位寄存器,其中while循环用于保证程序的持续运行,条件结构用于处理不同状态的执行,移位寄存器用于实现从一个状态跳转 ...
- [LC] 318. Maximum Product of Word Lengths
Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the tw ...
- gitbook安装及初步使用
gitbook安装 https://www.jianshu.com/p/421cc442f06c https://blog.csdn.net/lu_embedded/article/details/8 ...
- 用两个栈实现一个队列(C++)
分析 栈:后进先出 队列:先进先出 要使用两个栈实现队列(先进先出),主要思路是 1.插入一个元素:直接将元素插入stack1即可. 2.删除一个元素:当stack2不为空时 ,直接弹出栈顶元素,当s ...
- python3之urllib基础
urllib简单应用html=urllib.request.urlopen(域名/网址).read().decode('utf-8')----->--->urlopen-->获取源码 ...
- gin源码剖析
介绍 Gin 是一个 Golang 写的 web 框架,具有高性能的优点,基于 httprouter,它提供了类似martini但更好性能(路由性能约快40倍)的API服务.官方地址:https:// ...
- [洛谷P3403] 跳楼机
题目传送门 套路题,同余最短路. 先只考虑y.z进行连边,再在mod x的意义下进行计算. 这里的“距离”dis[i]指的是,在所有满足a mod x=i的a里,能到达的最小的a是多少. 显然只要能到 ...