https://docs.oracle.com/javase/8/docs/api/java/util/Map.html

  public interface Map<K,V>

  K—key,V——value;

  常用的实现类:HashMap,HashTable,LinkedHashMap。

  

  一、简介

  Map是Java集合框架的根接口,另一个是Collection接口。

  一个Map中,不能包含重复的key;一个key只能映射到一个value。

  Map并不是一种集合,但是Map可以提供三种集合视图:

  • key-value映射的Set视图;
  • key的set视图;
  • value的Collection视图

  Map的顺序被定义为Map的集合视图上的迭代器所返回元素的顺序。而一些实现类如TreeMap,自定义了顺序;一些则没有(HashMap)。

  如果一个可变(Mutable)对象作为Map的key,需要特别注意,如果这个对象的修改影响到了equals比较,那map的行为是不明确的。针对此种情况有一个很好的示例,Map不允许将自身作为key,因为这种情况下,equals()和hashcode()不能被很好地定义。

  一般用途的Map应该提供两个构造函数:

  1. 无参构造函数,创建一个空的Map;
  2. 有一个形参为Map的构造函数,即复制一个Map;

  

  Map的实现类对所包含的元素会有不同的限制,HashTable的键和值都不允许为null,HashMap的键和值都允许为null

  二、嵌套类(接口)

  Map接口中有一个嵌套类,当然实际上是一个接口。

  public static interface Map.Entry<K,V>

  它是一个map的key-value条目。Map的entrySet()方法返回一个map的集合视图,这个返回的Collection视图中的元素类型就是Map.Entry<K,V>。

  要想获得一个map entry的引用,唯一途径就是这个集合视图的迭代器。这些Map.Entry对象仅在迭代期间有效

  the behavior of a map entry is undefined if the backing map has been modified after the entry was returned by the iterator, except through the setValue operation on the map entry.

  

  三、方法

  1、int size()

  返回key-value映射的数目

  2、boolean  isEmpty()

  若Map不包含任何key-value映射,返回true。

  3、boolean containsKey(Object key)

  若Map含有指定的key键,返回true。

  Throws:

  • ClassCastException - 如果key键的类型不适用这个映射(可选)
  • NullPointerException - 如果指定的key键为空,并且此映射不允许null(可选)

  4、boolean containsValue(Object value)

  若Map含有指定的value值,返回true。

  Throws:

  ClassCastException - 如果value类型不适用这个映射(可选)

  NullPointerException - 如果指定的value为空,并且此映射不允许为null(可选)

  5、V get(Object key)

  返回指定的key键所映射的value;

  如果Map不包含这个key的映射,返回null

  若该map允许为null的value,那么返回得到一个null值时,并不能确定该map是否含有key的映射。此时利用containsKey()区分。

  6、V put(K key, V value)

  将指定的value与这个map中的key关联起来(可选操作)。 

  如果map中已经包含了该key的映射,则指定的value会取代原来的值。

  此方法返回key原来映射到的值,当map中不存在该key的映射时,返回null(当然,如果允许value为null,那也许原来的映射值就为value)。

  7、V remove(Object key)

  如果指定的key在map中存在,移除它的映射。(可选操作)

  返回key映射到的value,但如果不包含指定key的映射,返回空。(考虑该map是否允许value值为null)

  一旦调用返回,映射将不包含指定key的映射

  8、void putAll (Map<? extends K,? extends V> m)

  从指定的map m中拷贝所有的映射到这个map中。(可选)

  如果在操作过程中,指定的map m被修改了,则此操作的结果未定义。

  9、void clear()

  把一个map清空。(可选)  

  10、Set<K> keySet()

  返回包含了该map中key键的Set视图。

  这个set视图由该map支持,因此map的更改会反映在这个Set视图中,反之亦然(对Set视图的更改也会改变map???)。

  Set视图支持通过 Iterator.remove、Set.remove()、removeAll()、retainAll()和clear()操作来删除元素,这将从映射中移除对应的映射。但是Set视图不支持add()、addAll()操作。

  如果正在在Set视图上进行迭代操作时,map被修改了(除了迭代器的remove操作),这时的结果的不可预知的。  

  11、Collection<V> values()

  返回一个包含该map中的value值的Collection视图。

  这个Collection视图由该map支持,因此map的更改会反映在这个Set视图中,反之亦然。

  Collection视图支持 Iterator.remove、Collection.remove、removeAll、retainAll和clear操作。不支持add和addAll操作。

  同情况下,结果不可预知~

  12、Set<Map.Entry<K,V>> entrySet()

  返回一个该map的映射的Set视图。

  这个set视图由该map支持,因此map的更改会反映在这个Set视图中,反之亦然。

  如果正在在Set视图上进行迭代操作时,map被修改了(除了迭代器的remove操作,or through the setValue operation on a map entry returned by the iterator),这时的结果的不可预知的。

  Set视图支持通过 Iterator.remove、Set.remove()、removeAll()、retainAll()和clear()操作来删除元素,这将从映射中移除对应的映射。但是Set视图不支持add()、addAll()操作。

  13、boolean equals(Object o)

  如果指定的o也是一个map,且和该map有完全一样的映射,返回true。

  怎么定义两个map m1和m2有完全一样的映射呢?

 if m1.entrySet().equals(m2.entrySet())

  这样也保证了equals()方法在Map的不同实现类之间有效地作用。

  14、int hashcode()

  一个map的hash code被定义为:the sum of the hash codes of each entry in the map's entrySet() view.

  这意味着两个equals的map的hashcode也是一样的。

  15、default V getOrDefault(Object key, V defaultValue)

  16、default void forEach(BiConsumer<? super K,? super V> action)

  17、default void replaceAll(BiFunction<? super K,? super V,? extends V> function)

  18、default boolean remove(Object key, Object value)

  19、default replace(K key, V oldValue, V newValue)

  20、default V replace(K key, V value)

  (还有几个,不列了…)

  

  

Map<k,v>接口的更多相关文章

  1. java中集合类中Collection接口中的Map接口的常用方法熟悉

    1:Map接口提供了将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.Map接口中同样提供了集合的常用方法. 2:由于Map集合中的元素是通过key,value,进行存储的,要 ...

  2. 第19章 集合框架(3)-Map接口

    第19章 集合框架(3)-Map接口 1.Map接口概述 Map是一种映射关系,那么什么是映射关系呢? 映射的数学解释 设A,B是两个非空集合,如果存在一个法则,使得对A中的每一个元素a,按法则f,在 ...

  3. Map接口使用注意事项

    1,Map接口对象本身不能直接使用迭代进行输出的.因为map每个位置存放的是一对值. 而iterator每次只能找到一个值.如果一定要迭代输出,可以通过以下步骤.: 但是,Map接口只作为查找使用,输 ...

  4. Map接口,Map.Entry,hashMap类,TreeMap类,WeakHashMap。

    Collection接口之前接触过,每次保存的对象是一个对象,但是在map中保存的是一对对象,是以key->value形式保存的. 定义: public interface Map<K,V ...

  5. List接口、Set接口、Map接口的方法

    一.Collection接口中的方法介绍 int size();返回此Collection中的元素数 boolean isEmpty(); 判断是否为空 boolean containsAll(Col ...

  6. Java集合中Map接口的使用方法

    Map接口 Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value: Map中的键值对以Entry类型的对象实例形式存在: 建(key值 ...

  7. JAVA ,Map接口 ,迭代器Iterator

    1.    Map 接口概述 java.util.Map 接口描述了映射结构, Map 接口允许以键集.值集合或键 - 值映射关系集的形式查看某个映射的内容. Java 自带了各种 Map 类. 这些 ...

  8. Java集合框架中Map接口的使用

    在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...

  9. Java集合之Map接口

    Map使用键值对来存储数据,将键映射到值对象,一个映射不能包含重复的键,每一个键最多只能映射到一个值.Map接口的具体实现类:HashMap,Hashtable,TreeMap,LinkedHashM ...

  10. Java集合——Map接口

    1.定义 Map用于保存存在映射关系<key,value>的数据.其中,key值不能重复(使用equals()方法比较),value值可以重复 2.方法 V  put(key,value) ...

随机推荐

  1. $\LaTeX$数学公式大全9

    $9\ Math\ mode\ accents$ $\acute{a}$ \acute{a} $\breve{a}$ \breve{a} $\ddot{a}$ \ddot{a} $\grave{a}$ ...

  2. [题解] [HNOI2014] 世界树

    题面 [HNOI2014]世界树 题解 从数据范围很容易看出是个虚树DP(可惜看出来了也还是不会做) 虚树大家应该都会, 不会的话自己去搜吧, 我懒得讲了, 我们在这里只需要考虑如何DP即可 首先我们 ...

  3. Pytorch:使用GPU训练

    1.模型转为cuda gpus = [0] #使用哪几个GPU进行训练,这里选择0号GPU cuda_gpu = torch.cuda.is_available() #判断GPU是否存在可用 net ...

  4. zookeeper系列(五)zookeeper在大型分布式系统中的应用

    作者:leesf    掌控之中,才会成功:掌控之外,注定失败. 出处:http://www.cnblogs.com/leesf456/p/6063694.html 尊重原创感谢博主公开这么好的博文, ...

  5. C++入门经典-例9.3-类模板,简单类模板

    1:使用template关键字不但可以定义函数模板,而且可以定义类模板.类模板代表一族类,它是用来描述通用数据类型或处理方法的机制,它使类中的一些数据成员和成员函数的参数或返回值可以取任意数据类型.类 ...

  6. 【python / mxnet / gluoncv / jupyter notebook】基于mxnet和gluoncv的图像内容识别

    程序环境为高性能集群:CPU:Intel Xeon Gold 6140 Processor * 2(共36核心)内存:512GB RAMGPU:Tesla P100-PCIE-16GB * 2 In  ...

  7. LeetCode 130. 被围绕的区域(Surrounded Regions)

    题目描述 给定一个二维的矩阵,包含 'X' 和 'O'(字母 O). 找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充. 示例: X X X X X O O X X X ...

  8. 浅析VxWorks与Linux操作系统的区别

        版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/flaoter/article/details/76861710 转载请标明出处floater ...

  9. Git clone 报错 128

    使用tortoiseGit检出项目是报错,错误代码128: 使用git bash检出相同目录时返回 git clone fatal:destination path already exists an ...

  10. 删除github上的一个repository

    在学github之初,我们免不了会建立一些简单的repository,那么,如何删掉它们呢? 第一步,打开所要删除的repository,比如:meilin.github.io 第二步,点击setti ...