一、简述

public interface Map<K,V>将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

注意:Map中的集合不能包含重复的键,值可以重复。每个键只能对应一个值。

Map集合是键值对形式存储值的,所以遍历Map集合无非就是获取键和值,根据实际需求,进行获取键和值。

Map接口提供三种collection试图,允许以键集、值集或键-值集映射关系集的形式查看某个映射的内容。映射顺序 定义为迭代器在映射的 collection 视图上返回其元素的顺序。某些映射实现可明确保证其顺序,如 TreeMap 类;另一些映射实现则不保证顺序,如 HashMap 类。

注:

将可变对象用作映射键时必须格外小心。当对象是映射中某个键时,如果以影响 equals 比较的方式更改了对象的值,则映射的行为将是不确定的。此项禁止的一种特殊情况是不允许某个映射将自身作为一个键包含。虽然允许某个映射将自身作为值包含,但请格外小心:在这样的映射上 equals 和 hashCode 方法的定义将不再是明确的。

所有通用的映射实现类应该提供两个“标准的”构造方法:

一个 void(无参数)构造方法,用于创建空映射;

一个是带有单个 Map 类型参数的构造方法,用于创建一个与其参数具有相同键-值映射关系的新映射。

实际上,后一个构造方法允许用户复制任意映射,生成所需类的一个等价映射。尽管无法强制执行此建议(因为接口不能包含构造方法),但是 JDK 中所有通用的映射实现都遵从它。

二、Map接口

public interface Map<K, V>{int size();        //返回此映射中的键-值映射关系数。boolean isEmpty();    //如果此映射未包含键-值映射关系,则返回 true。boolean containsKey(Object key);    //如果此映射包含指定键的映射关系,则返回 true。boolean containsValue(Object value)    //如果此映射将一个或多个键映射到指定值,则返回 true。V get(Object key);     //根据key查找对应value数据,如果没有,则返回 null。V put(K key, V value);    //向集合保存数据可选操作)。V remove(Object key);    //如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。void putAll(Map<? extends K, ? extends V> m); //从指定映射中将所有映射关系复制到此映射中(可选操作)。void clear();    //从此映射中移除所有映射关系(可选操作)。Set<K> KeySet();     //返取出全部key。Collection<V> values();    //返回此映射中包含的值的 Collection 视图。Set<Map, Entry<K, V>> entrySet();    //即将Map集合转化为Set集合。interface Entry<K, V> {K getKey();V getValue();V setValue(V value);boolean equals(Object o);int hashCode();        }boolean equals(Object o);    //比较指定的对象与此映射是否相等。int hashCode();        //返回此映射的哈希码值。
}

三、具体实现

接口java.util.Map,包括3个实现类:HashMap、Hashtable、TreeMap。当然还有LinkedHashMap、ConcurrentHashMap 、WeakHashMap。

Map是用来存储键值对的数据结构,键值对在数组中通过数组下标来对其内容索引的,而键值对在Map中,则是通过对象来进行索引,用来索引的对象叫做key,其对应的对象叫value。

四、Map的两种取值方式KeySet、entrySet

(一)KeySet

先获取所有键的集合,再根据键获取对应的值。(即先找到丈夫,再去找妻子)

keySet的演示图解

(二)entrySet

先获取map中的键值关系封装成一个个的entry对象, 存储到一个Set集合中,再迭代这个Set集合, 根据entry获取对应的key和value。向集合中存储自定义对象(entry类似于是结婚证)

entrySet的演示图解

HashMap : 内部结构是哈希表,不是同步的。允许null作为键,null作为值。
  TreeMap : 内部结构是二叉树,不是同步的。可以对Map集合中的键进行排序。

五、HashMap

Java集合:Map集合相关推荐

  1. 1.6 Java遍历Map集合

    Java遍历Map集合的四种方式 Map 集合的遍历与 List 和 Set 集合不同.Map 有两组值,因此遍历时可以只遍历值的集合,也可以只遍历键的集合,也可以同时遍历.Map 以及实现 Map ...

  2. java 定义map集合_java基础-Map集合

    java基础-Map集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Map集合概述 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它 ...

  3. (10)Java泛型-Map集合-集合框架工具类-可变参数-静态导入

    -- 部分1.5新特性Java泛型-Map集合-集合框架工具类 泛型 概述: JDK1.5版本以后出现的新特性,用于解决安全问题,是一个类型安全机制. 对于泛型可以这样理解: 没有使用泛型时,只要是对 ...

  4. 黑马程序员----------------java基础-----------------Map集合

     ------- <a href="http://www.itheima.com" target="blank">android培训</a ...

  5. 【Groovy】map 集合 ( map 集合操作符重载 | 使用 << 操作符添加一个元素 | 代码示例 )

    文章目录 一.使用 " << " 操作符添加一个元素 二.代码示例 一.使用 " << " 操作符添加一个元素 对 map 集合 使用 ...

  6. 【Groovy】map 集合 ( map 集合操作符重载 | + 操作符重载 | 代码示例 )

    文章目录 一.map 集合 " + " 操作符重载 二.代码示例 一.map 集合 " + " 操作符重载 对 map 集合使用 " + " ...

  7. 【Groovy】map 集合 ( map 集合遍历 | 使用 map 集合的 each 方法遍历 map 集合 | 代码示例 )

    文章目录 一.使用 map 集合的 each 方法遍历 map 集合 二.代码示例 一.使用 map 集合的 each 方法遍历 map 集合 遍历 map 集合 , 可以调用 map 集合的 eac ...

  8. 常见的数据结构:栈 队列 数组 链表 红黑树——List集合 _ HashSet集合、可变参数 collections集合 Map集合

    2021-06-07复习java 一.常见的数据结构 栈(先进后出) 队列 数组 链表 红黑树 二.List集合_介绍&常用方法 ArrayList集合 Linkedlist集合 三.Hash ...

  9. JAVA中Map集合的使用举例

    首先创建一个Emp类,再将几个Emp对象添加到Map集合中. Emp的id作为Map的键,并将id为"005"的对象从集合中删除. package com.han;import j ...

  10. [Java基础]Map集合的遍历

    Map集合是Java中非常常用的一个集合,通过Map集合可以实现对数据的快速检索和插入删除等操作:同样对Map集合的遍历也是十分重要的:如果你之前学过C++,那么对于Map的遍历操作可就不能像是C++ ...

最新文章

  1. “斐波那契数列”的两种算法
  2. 转轮机加密详解两种解题方法 -攻防世界
  3. php 去掉字符串的逗号,php 怎么去掉字符串最后一个逗号
  4. SIFT算法原理(不带公式)
  5. pc端vue项目打开pdf文件;网页查看pdf文件;浏览器直接打开pdf文件
  6. C++ new一个数组时,指针移动程序崩溃问题
  7. rhel6.1 kvm安装virtio驱动
  8. CenterNet+ deepsort实现多目标跟踪
  9. Java中的基本类型和引用类型(未完)
  10. 关于Windows 2003 sp1不能打开CHM文件的问题
  11. 广义矩估计的一般步骤_【基本无害】动态理性预期理论与广义矩估计02
  12. CSS Sprite雪碧图应用
  13. 如何打开.DAT格式的测风数据?
  14. 【老生谈算法】基于matlab指纹识别系统设计与算法原理详解(论文+程序源码)——指纹识别
  15. 人工智能在实体零售行业,主要的应用场景是什么?
  16. 黄天不负有心人,拥有属于自己的LOGO
  17. 如何比较两个速度的大小地程序_58安居客小程序平台化与多小程序开发探索与实践...
  18. 抖音小店另类起店方法
  19. 1897个D3 例子
  20. 中秋佳节,实现一个自定义任意路径嫦娥奔月程序:过什么节,代码走起

热门文章

  1. c++检测输入是否为数字_Go64 for Mac(检测应用是否为64位)
  2. svm回归matlab工具箱很慢,PSO优化SVM参数进行回归预测,结果很不理想
  3. java两个长度不同数组_两组数组,长度不一样,如果其中一个数组的值在另一个中不存在,则不符合要求.怎么算?...
  4. mysql源码_MySql轻松入门系列——第一站 从源码角度轻松认识mysql整体框架图
  5. ciaodvd数据集的简单介绍_人工智能进阶-CIFAR-10数据集介绍
  6. 多线程 循环 锁_大多数人还不清楚的iOS多线程
  7. mysql挪到小数点位置_mysql数据库迁移到另一个硬盘上
  8. c语言编程常见问题解答,C语言编程常见问题解答之常用函数的包含文件
  9. Maven 系列 2:Maven 本地仓库与远程仓库配置完整步骤以及修改 settings.xml 后的完整内容(配置非私服,远程仓储镜像强力推荐阿里云)
  10. webpack+react+es6开发模式