JDK源码(1.7) -- java.util.Map<K,V>
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>的更多相关文章
- JDK源码(1.7) -- java.util.Collection<E>
java.util.Collection<E> 源码分析(JDK1.7) -------------------------------------------------------- ...
- JDK源码学习之 java.util.concurrent.automic包
一.概述 Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便程序员在多线程环境下无锁的进行原子操作.原子变量的底层使用了处理器提供的原子指令,但是不同的CP ...
- JDK源码(1.7) -- java.util.Deque<E>
java.util.Deque<E> 源码分析(JDK1.7) -------------------------------------------------------------- ...
- JDK源码(1.7) -- java.util.Queue<E>
java.util.Queue<E> 源码分析(JDK1.7) -------------------------------------------------------------- ...
- JDK源码(1.7) -- java.util.Arrays
java.util.Arrays 源码分析 ------------------------------------------------------------------------------ ...
- JDK源码(1.7) -- java.util.AbstractList<E>
java.util.AbstractList<E> 源码分析(JDK1.7) ------------------------------------------------------- ...
- JDK源码(1.7) -- java.util.ListIterator<E>
java.util.ListIterator<E> 源码分析(JDK1.7) ------------------------------------------------------- ...
- JDK源码(1.7) -- java.util.Iterator<E>
java.util.Iterator<E> 源码分析(JDK1.7) ----------------------------------------------------------- ...
- JDK源码(1.7) -- java.util.List<E>
java.util.List<E> 源码分析(JDK1.7) --------------------------------------------------------------- ...
随机推荐
- 概述sysfs文件系统【转】
转自:http://blog.csdn.net/npy_lp/article/details/78933292 内核源码:linux-2.6.38.8.tar.bz2 目标平台:ARM体系结构 sys ...
- Appium环境搭建说明(包括报错处理)
Appium环境搭建说明 一.环境配置 前提是windows系统已安装以下软件: 1.jdk 我装的是1.8.0 2.android-sdk 3.python,3.4-3.6 5.Node.js,v8 ...
- nginx与PHP的关系和交互方式【转】
nginx与PHP的关系. 对比, apache和PHP的关系, 将PHP安装成apache的一个功能模块, 导致的结果, 对外只有一个apache程序, PHP并不独立出现, 仅仅是apache的模 ...
- Linux-Load Average解析(转)
load Average 1.1:什么是Load?什么是Load Average? Load 就是对计算机干活多少的度量(WikiPedia:the system Load is a measur ...
- ubuntu遇到的 the system is runing low-graphics mode 问题
不知道修改了什么,然后开机显示the system is runing low-graphics mode 看过博客使用如下方法成功进入系统,但是显示分辨率很低,显示 built-in display ...
- 用PHP去实现数据库查询结果缓存
有些时候我们希望减少对数据库的查询来提高程序的性能,因为这些数据不是经常变更的,而是会在很长一段时间内都不会变化,因此,我们每连接一次数据库,都会把相应的结果用文件的形式保存起来.比如对于一个商城来说 ...
- web 端 gantt组件选型
gantt - 甘特图 甘特图(Gantt chart)又称为横道图.条状图(Bar chart).其通过条状图来显示项目,进度,和其他时间相关的系统进展的内在关系随着时间进展的情况.以提出者亨利·L ...
- 关于语义化版本(semantic versioning or SemVer)
1 为什么要有SemVer? SemVer用来规范组件之间的依赖版本,它使用一个版本号来传递出组件的API的变化情况. 在理解这规范之后,看一眼依赖包的版本号,就知道API的变化(兼容性)程度,方便 ...
- 《构建高性能 Web站点》笔记
书名:构建高性能Web站点 出版社: 电子工业出版社 ISBN:9787121170935 一 绪论 等待的时间: (1) 数据在网络上的传输时间 (2) 站点服务器处理请求并生成回应数据的时间 ( ...
- 使用STL sort对字符串按字典序排序
使用string数组 #include<iostream> #include<string> #include<algorithm> using namespace ...