zoukankan      html  css  js  c++  java
  • JDK源码(1.7) -- java.util.Map<K,V>

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

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

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

    1 public interface Map<K,V>{
    2    // Query Operations
    3    // Modification Operations
    4    // Bulk Operations
    5    // Views
    6    // Comparison and hashing   
    7 
    8    //inner interface define{}   
    9 }

    (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>定义

    1 interface Entry<K,V> {
    2     ...
    3     ...
    4 }

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

     1 package java.util;
     2 
     3 public interface Map<K,V> {
     4     // Query Operations
     5     int size();
     6 
     7     boolean isEmpty();
     8 
     9     boolean containsKey(Object key);
    10 
    11     boolean containsValue(Object value);
    12 
    13     V get(Object key);
    14 
    15     // Modification Operations
    16     V put(K key, V value);
    17 
    18     V remove(Object key); 
    20 
    21     // Bulk Operations
    22     void putAll(Map<? extends K, ? extends V> m);
    23 
    24     void clear();
    25 
    27     // Views
    28     Set<K> keySet();
    29 
    30     Collection<V> values();
    31 
    32     Set<Map.Entry<K, V>> entrySet();
    33 
    34     // Comparison and hashing
    35     boolean equals(Object o);
    36 
    37     int hashCode();
    38 
    39    // inner interface
    40     interface Entry<K,V> {
    41         K getKey();
    42 
    43         V getValue();
    44 
    45         V setValue(V value);
    46 
    47         boolean equals(Object o);
    48 
    49         int hashCode();
    50     }
    51 }

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     





    查询操作
    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()返回此映射的哈希码值

  • 相关阅读:
    浅谈HashMap的内部实现
    浅谈Java的集合体系
    如何通过注解Bean类来封装SQL插入语句
    谈一谈垃圾回收器
    万物皆对象
    关于枚举
    Servlet向客户端发送中文数据的编码情况
    "流"派家族,一脉相承
    个人简历用HTML编写
    get和post的区别
  • 原文地址:https://www.cnblogs.com/xinhuaxuan/p/6339647.html
Copyright © 2011-2022 走看看