前言

  生活中,我们常会看到这样一种集合: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集合遍历键找值方式

  键找值 , 即通过元素中的键, 获取键所对应的值。

  分析步骤:
  1. 获取Map中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键。方法提示: keyset()。
  2. 遍历键的Set集合,得到每一个键。
  3. 根据键,获取键所对应的值。方法提示: 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)对象中的键与值。

  操作步骤与图解:
  1. 获取Map集合中,所有的键值对(Entry)对象,以Set集合形式返回。方法提示 : entrySet() 。
  2. 遍历包含键值对(Entry)对象的Set集合,得到每一个键值对(Entry)对象。
  3. 通过键值对(Entry)对象,获取Entry对象中的键与值。 方法提示 : getkey() 、getValue()。

  Tip : Map集合不能直接使用迭代器或者 foreeach 进行遍历 , 但是转成 Set 之后就可以使用了。

  :这篇简单写些Map集合的知识,后面再把HashMap写一写。

Map - 与君初相识的更多相关文章

  1. 初相识|performance_schema全方位介绍

    初相识|performance_schema全方位介绍 |导 语 很久之前,当我还在尝试着系统地学习performance_schema的时候,通过在网上各种搜索资料进行学习,但很遗憾,学习的效果并不 ...

  2. 我和python的初相识

    认识Python是大二的选修 单纯只是想赚学分而已 后来觉得越来越有趣. 一.python简介 简单来说Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言.Python 的设 ...

  3. audacity 做音频分析之--初相识

    软件介绍: Audacity是一个跨平台的声音编辑软件,用于录音和编辑音频,是自由.开放源代码的软件.可在Mac OS X.Microsoft Windows.GNU/Linux和其它操作系统上运作. ...

  4. 神经网络架构PYTORCH-初相识(3W)

    who? Python是基于Torch的一种使用Python作为开发语言的开源机器学习库.主要是应用领域是在自然语言的处理和图像的识别上.它主要的开发者是Facebook人工智能研究院(FAIR)团队 ...

  5. Java 初相识

    Java是如何出现的呢?这就要回到1991年,那时候随着单片机的发展,出现了很多微型的系统,Sun公司在这个时候就成立的一个项目组,成员就有我们熟知的“Java之父” 詹姆斯·高斯林,起初的目标是为了 ...

  6. 3.Spring Cloud初相识--------Ribbon客户端负载均衡

    前言: 在生产环境中,未避免单点故障,每个微服务都会做高可用部署. 通白的说,就是每一个一模一样的服务会根据需求提供多分在多台机器上. 那么在大并发的情况下,如何分配服务可以快速得到响应,就成为了我们 ...

  7. NetworkX初相识

    听说NetworkX是一个很牛的复杂网络研究的工具,就来试一下吧. import networkx as nx G= nx.Graph()#建立一个空白的图 G.add_node("node ...

  8. 6.Spring Cloud初相识-------Zool路由

    前言: 在生产环境中,我们不可能将每个服务的真实信息暴漏出去,因为这样太不安全. 我们会选择使用路由代理真实的服务信息,由它负责转发给真实的服务. 新建一个Zool: 1.添加依赖 <?xml ...

  9. 5.Spring Cloud初相识-------Hystrix熔断器

    前言: 1.介绍Hystrix 在一个分布式系统里,许多依赖不可避免的会调用失败,比如超时.异常等,如何能够保证在一个依赖出问题的情况下,不会导致整体服务失败,这个就是Hystrix需要做的事情.Hy ...

随机推荐

  1. jenkins-定时跑代码

    build periodically和poll scm都可以定时运行

  2. python学习笔记(4)数据类型-元组

    元组其实和列表一样,不一样的是,元组的值不能改变,一旦创建,就不能再改变了,比如说,要存数据库的连接信息,这个连接信息在程序运行中是不能被改变的,如果变了那数据库连不上了,就程序就完犊子了,这样的就可 ...

  3. HDU-6672-Seq

    题目传送门 ps:一般这种给一个数列求第n项,n还特别大的.要么矩阵快速幂,要么转化递推式.不过这题数据也特别多有100000组,所以就算矩阵快速幂可能也要超时,而且我还没推出来.转化递推式需要比较强 ...

  4. cs231n spring 2017 lecture4 Introduction to Neural Networks

    1. Backpropagation:沿着computational graph利用链式法则求导.每个神经元有两个输入x.y,一个输出z,好多层这种神经元连接起来,这时候已知∂L/∂z,可以求出∂L/ ...

  5. 网页title滚动

    );        var leftstar=title.substring (1,title.length );        document.title =leftstar +firstch ; ...

  6. Java IO: InputStreamReader和OutputStreamWriter

    作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本章节将简要介绍InputStreamReader和OutputStreamWriter.细心的读者可 ...

  7. 吴裕雄--天生自然Android开发学习:1.2.2 使用Android Studio开发Android APP

    1.下载Android Studio 官网下载:Android Studio for Window ... :http://developer.android.com/sdk/installing/s ...

  8. MySQL 之全文索引

    最近在复习数据库索引部分,看到了 fulltext,也即全文索引,虽然全文索引在平时的业务中用到的不多,但是感觉它有点儿意思,所以花了点时间研究一下,特此记录. 引入概念通过数值比较.范围过滤等就可以 ...

  9. python的collections模块和functools模块

    collections是Python内建的一个集合模块,提供了许多有用的集合类. namedtuple 我们知道tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成: >>> ...

  10. 通过命令行创建Django项目

    只有安装的是pycharm专业版才可以直接在pycharm面板中直接创建Django项目 如果不是专业版,可以通过命令行创建Django项目 https://www.cnblogs.com/jiare ...