JDK1.9 集合框架源码阅读——Map系列——有趣的问题及源码解答

V get(Object key);
该方法将会返回Map中对应于key的value。如果这个key不存在,则返回null。

问题

那么问题来了,如果这个map本身允许null作为value呢?这样,当该方法返回null时,就会有两种情况,一种是不存在该key,第二种是该key对应的值就是null。

解答

官方源码注释给出了解决方法:

意思是说,当出现这种情况时,我们可以通过containsKey方法来区分这两种情况。

public Set<K> keySet()
该方法返回map的所有key组成的一个集合

我们知道,该方法返回的是一个Set类型的视图,对该set的任何修改都会映射到背后的map中,反之亦然。

问题

那么问题来了,为什么对set的操作都会映射到背后的map中呢?答案在Jdk的AbstractMap.java中:

我们可以看到,对set的所有操作,最终都是通过调用map的相应方法来实现的。因此,所有对set的操作都会映射到map中。

原文地址:https://www.cnblogs.com/zhaolide/p/9759644.html

时间: 2024-11-10 08:09:58

JDK1.9 集合框架源码阅读——Map系列——有趣的问题及源码解答的相关文章

JAVA学习第三十九课(常用对象API)- 集合框架(七)— Map集合及其子类对象

一.Map集合常见子类 HashTable:内部结构是哈希表,同步,此实现提供所有可选的映射操作,不允许使用 null 值和 null 键 (HashTable下有子类Properties,使用频率非常高,用来存储键值对型的配置文件信息和IO技术相结合) HashMap:内部结构是哈希表,不同步,此实现提供所有可选的映射操作,并允许使用 null 值和 null 键. TreeMap:内部结构是二叉树,不同步,可以对Map集合中的键进行排序. 二.HashMap演示 import java.ut

Java基础知识强化之集合框架笔记51:Map集合之Map集合的功能概述与测试

1. Map集合的功能概述 (1)添加功能 V put(K key,V value):添加元素.这个其实还有另一个功能?先不告诉你,等会讲 如果键是第一次存储,就直接存储元素,返回null 如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值 (2)删除功能 void clear():移除所有的键值对元素 V remove(Object key):根据键删除键值对元素,并把值返回 (3)判断功能 boolean containsKey(Object key):判断集合是否包含指定的键 bo

jdk源码阅读-Map

在我们正式分析Map的源代码前,我们首先阅读下这篇关于Map的简介 http://www.jb51.net/article/32652.htm 简单来说,Map分为两种一种是有序的,一种是无序的. 我们用的较多的为无序的,即:Hashmap.其实现的原理为哈希值(hashcode). 而关于有序的实现,为TreeMap,其实现的原理为红黑树. 在以上的链接中,建议“HashMap通常比TreeMap快一点(树和哈希表的数据结构使然),建议多使用HashMap,在需要排序的Map时候才用TreeM

Java基础知识强化之集合框架笔记57:Map集合之HashMap集合(HashMap&lt;Student,String&gt;)的案例

1. HashMap集合(HashMap<Student,String>)的案例 HashMap<Student,String>键:Student      要求:如果两个对象的成员变量值都相同,则为同一个对象.值:String HashMap是最常用的Map集合,它的键值对在存储时要根据键的哈希码来确定值放在哪里. HashMap 中作为键的对象必须重写Object的hashCode()方法和equals()方法 2. 代码示例: (1)Student.java,如下: 1 pa

JAVA学习第三十八课(常用对象API)- 集合框架(六)— Map集合及其常用方法

一.Map集合特点 Map集合(双列集合)一次添加一对元素,Collection集合(单列集合)一次添加一个元素 接口 Map<K,V>,实际上存储的是键值对 特点: 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. 也就是说Map中必须保证键的唯一性 二.常用方法 1.添加:value = put(key,value);返回前一个和key相关联的值,如果没有返回null 2.删除:void clear();把Map中的所有映射关系清除 value remove(ke

Java集合框架(五)—— Map、HashMap、Hashtable、Properties、SortedMap、TreeMap、WeakHashMap、IdentityHashMap、EnumMap

Map Map用于保存具有映射关系的数据,因此Map集合里保存着两组值,一组值用于保存Map里的key,另一组值用于保存Map里的value,key和value都可以是任何引用类型的数据.Map的key不容许重复,即同一个Map对象的任何两个key通过equals方法比较总是返回false. key和value之间存在单向一对一关系,即通过指定的key,总能找到唯一的.确定的value.从Map中取出数据时,只要给出指定的key,就可以取出对应的value. 如果把Map里的所有key放在一起看

Java基础知识强化之集合框架笔记58:Map集合之LinkedHashMap类的概述

1. LinkedHashMap类的概述 LinkedHashMap:Map接口的哈希表(保证唯一性) 和 链接(保证有序性)列表实现,具有可预知的迭代顺序. 2. 代码示例: 1 package cn.itcast_03; 2 3 import java.util.LinkedHashMap; 4 import java.util.Set; 5 6 /* 7 * LinkedHashMap:是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序. 8 * 由哈希表保证键的唯一性 9 * 由链

Java基础知识强化之集合框架笔记59:Map集合之TreeMap(TreeMap&lt;String,String&gt;)的案例

1. TreeMap类的概述: 键是红黑树结构,可以保证键的排序和唯一性. 2. TreeMap案例: TreeMap<String, String> 代码示例: 1 package cn.itcast_04; 2 3 import java.util.Set; 4 import java.util.TreeMap; 5 6 /* 7 * TreeMap:是基于红黑树的Map接口的实现. 8 * 9 * HashMap<String,String> 10 * 键:String 11

Java基础知识强化之集合框架笔记52:Map集合之Map集合的遍历 键找值

1. Map集合的遍历  Map -- 夫妻对 思路:  A:把所有的丈夫给集中起来.  B:遍历丈夫的集合,获取得到每一个丈夫.  C:让丈夫去找自己的妻子.  转换:  A:获取所有的键  B:遍历键的集合,获取得到每一个键  C:根据键去找值 2. 代码示例: 1 package cn.itcast_01; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 import java.util.Set; 6 7 public cla