java.util.Map<K,V> 源码分析

---------------------------------------------------------------------------------

java.util.Map<K,V>是一个接口,它的定义如下:

 public interface Map<K,V>{
// Query Operations
// Modification Operations
// Bulk Operations
// Views
// Comparison and hashing //inner interface define{}
}

(1)从定义中可以看出Map接口中定义了:查询方法、修改方法、批量操作方法、返回视图方法、哈希和比较方法,而且还定义一个内部的接口

(2)类型参数:  K - 此映射所维护的键类型; V - 映射值的类型

------------------------------------------------------------------------------------------------

下面来看看java.util.Map<K,V>中具体有哪些方法

从下面的表格中可以看出java.util.Map<K,V>接口中一共有14个方法,其中查询操作5个;修改操作2个;批量操作2个;视图操作3个,比较和哈希操作2个。

查询操作 int size() 返回此映射中的键-值映射关系数。如果该映射包含的元素大于Integer.MAX_VALUE,则返回Integer.MAX_VALUE
boolean isEmpty()  如果此映射未包含键-值映射关系,则返回true
boolean containsKey(Object key) 如果此映射包含指定键的映射关系,则返回true
boolean containsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回true
V get(Object key) 返回指定键所映射的值,如果此映射不包含该映射的映射关系,则返回null
修改操作 V put(K key,V value) 将指定的值与此映射中的指定键关联。如果此映射以前包含一个该键的映射关系,则用指定值替换旧值。
V remove(Object key) 删除映射中键为key的元素关系
批量操作 void putAll(Map<? extends K,? extends V> m) 从指定映射中将所有映射关系复制到此映射中
void clear() 从此映射中移除所有映射关系
视图操作 Set<K> keySet() 返回此映射中包含的键的Set视图
Collection<V> values() 返回此映射中包含的值的Collection视图
Set<Map.Entry<K,V>> entrySet() 返回此映射中包含的映射关系的Set视图
比较和哈希操作 boolean equals(Object o) 比较指定的对象与此映射是否相等。如果给定的对象也是一个映射,并且这两个映射表示相同的映射关系,则返回true
int hashCode() 返回此映射的哈希码值

java.util.Map<K,V>中的一些规则:

(1)Map是一个"键-值对"(key-value)映射接口。Map映射中不能包含重复的键;每个键最多只能映射到一个值。

(2)Map接口提供了三种collection视图,允许以键集、值集、键-值映射关系的形式查看某个映射的内容。

(3)Map映射的顺序:有些实现类可以明确确保其顺序,比如:TreeMap、LinkedHashMap;另一些映射实现则不能保证顺序,比如:HashMap。

------------------------------------------------------------------------------------------------

下面来看看java.util.Map<K,V>中的内部接口Entry<K,V>定义

 interface Entry<K,V> {
...
...
}

Map.Entry<K,V>是Map接口中的内部接口,它是一个"键-值对"对象,Map通过entrySet()获得Map.Entry的"键-值对"集合,从而通过该集合实现对"键-值对"的操作。

Map.Entry<K,V>接口中的方法如下:

K getKey() 返回此"键-值对"对象的键
V getValue() 返回此"键-值对"对象的值
V setValue(V value) 设置此"键-值对"对象的值
boolean equals(Object o) 比较此"键-值对"对象是否与o对象相等
int hashCode() 返回此"键-值对"对象的哈希值 

上面说过java.util.Map<K,V>中存储的都是"键-值对"对象,这里的"键-值对"对象就是Map.Entry<K,V>的实例。

------------------------------------------------------------------------------------------------

java.util.Map<K,V>源码如下:(看看下面的源码,定义的很规范,各种操作都有-----> 此时应该想到它的实现类该有多可怜,要实现多少方法呀。~_~)

 package java.util;

 public interface Map<K,V> {
// Query Operations
int size(); boolean isEmpty(); boolean containsKey(Object key); boolean containsValue(Object value); V get(Object key); // Modification Operations
V put(K key, V value); V remove(Object key); // Bulk Operations
void putAll(Map<? extends K, ? extends V> m); void clear(); // Views
Set<K> keySet(); Collection<V> values(); Set<Map.Entry<K, V>> entrySet(); // Comparison and hashing
boolean equals(Object o); int hashCode(); // inner interface
interface Entry<K,V> {
K getKey(); V getValue(); V setValue(V value); boolean equals(Object o); int hashCode();
}
}

查询操作
int size()返回此映射中的键-值映射关系数。如果该映射包含的元素大于Integer.MAX_VALUE,则返回Integer.MAX_VALUE
boolean isEmpty()如果此映射未包含键-值映射关系,则返回true
boolean containsKey(Object key)如果此映射包含指定键的映射关系,则返回true
boolean containsValue(Object value)如果此映射将一个或多个键映射到指定值,则返回true
V get(Object key)返回指定键所映射的值,如果此映射不包含该映射的映射关系,则返回null
修改操作V put(K key,V value)将指定的值与此映射中的指定键关联。如果此映射以前包含一个该键的映射关系,则用指定值替换旧值。
V remove(Object key)删除映射中键为key的元素关系批量操作void putAll(Map<? extends K,? extends V> m)从指定映射中将所有映射关系复制到此映射中
void clear()从此映射中移除所有映射关系
视图操作Set<K> keySet()返回此映射中包含的键的Set视图
Collection<V> values()返回此映射中包含的值的Collection视图
Set<Map.Entry<K,V>> entrySet()返回此映射中包含的映射关系的Set视图
比较和哈希
boolean equals(Object o)比较指定的对象与此映射是否相等。如果给定的对象也是一个映射,并且这两个映射表示相同的映射关系,则返回true
int hashCode()返回此映射的哈希码值

JDK源码(1.7) -- java.util.Map<K,V>的更多相关文章

  1. JDK源码(1.7) -- java.util.Collection<E>

     java.util.Collection<E> 源码分析(JDK1.7) -------------------------------------------------------- ...

  2. JDK源码学习之 java.util.concurrent.automic包

    一.概述 Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便程序员在多线程环境下无锁的进行原子操作.原子变量的底层使用了处理器提供的原子指令,但是不同的CP ...

  3. JDK源码(1.7) -- java.util.Deque<E>

    java.util.Deque<E> 源码分析(JDK1.7) -------------------------------------------------------------- ...

  4. JDK源码(1.7) -- java.util.Queue<E>

    java.util.Queue<E> 源码分析(JDK1.7) -------------------------------------------------------------- ...

  5. JDK源码(1.7) -- java.util.Arrays

    java.util.Arrays 源码分析 ------------------------------------------------------------------------------ ...

  6. JDK源码(1.7) -- java.util.AbstractList<E>

    java.util.AbstractList<E> 源码分析(JDK1.7) ------------------------------------------------------- ...

  7. JDK源码(1.7) -- java.util.ListIterator<E>

    java.util.ListIterator<E> 源码分析(JDK1.7) ------------------------------------------------------- ...

  8. JDK源码(1.7) -- java.util.Iterator<E>

    java.util.Iterator<E> 源码分析(JDK1.7) ----------------------------------------------------------- ...

  9. JDK源码(1.7) -- java.util.List<E>

    java.util.List<E> 源码分析(JDK1.7) --------------------------------------------------------------- ...

随机推荐

  1. Dull Chocolates Gym - 101991D 离散化 前缀和

    题目链接:https://vjudge.net/problem/Gym-101991D 具体思路:首先看数据范围,暴力肯定不可以,可以下离散化,然后先求出离散化后每一个点到(1,1)的符合题目的要求的 ...

  2. 33 - 并发编程-线程同步-Event-lock

    目录 1 线程同步 1.1 Event 1.1.1 什么是Flag? 1.1.2 Event原理 1.1.3 吃包子 1.2 Lock 1.2.1 lock方法 1.2.2 计数器 1.2.3 非阻塞 ...

  3. GO-指针与函数

    一.指针类型 1.普通类型,变量存的就是值,也叫值类型.指针类型存的是地址 2.获取变量的地址,用&,比如:var a int, 获取a的地址 &a 3.指针类型,变量存的是一个地址, ...

  4. think php模板的使用

    {include file="../application/public/header.html"}<!-- Jumbotron --><div class=&q ...

  5. shell将多行文本重定向到文件【转】

    在shell中,使用Here Document方式将文本重定向到文件,格式如下: ( cat << EOF 要写的文本 EOF ) > 目标文件 示例test.sh: #! /bin ...

  6. python使用unittest模块selenium访问斗鱼获取直播信息

    import unittest from selenium import webdriver from bs4 import BeautifulSoup as bs class douyu(unitt ...

  7. Robust Online Visual Tracking with a Single Convolutional Neural Network

    Abstract:这篇论文有三个贡献,第一提出了新颖的简化的结构损失函数,能保持尽量多的训练样本,通过适应模型输出的不确定性来减少跟踪误差累积风险. 第二是增强了普通的SGD,采用了暂时的选择策略来进 ...

  8. beego学习笔记(4):开发文档阅读(4)

    beego.Run() 这个运行后, 1)解析配置文件,也就是conf目录下的. 2)判断是否开启session,并作相应的工作 3)执行用户的hookfunc. 4)是否编译模板 5)是否开启文档功 ...

  9. 洛谷 P1957 口算练习题 题解

    题目传送门 这道题是考字符串处理,另外输入要使用c++的cin的神奇功能. #include<bits/stdc++.h> using namespace std; int n;char ...

  10. 关于IPMI的几个问题

    https://blog.csdn.net/lanyang123456/article/details/51712878