java源码分析之集合框架Map 07

Map  概览:


 1. Map是一个接口,Map中存储的内容是键值对(key-value)

        2. 为了方便,我们抽象出AbstractMap类来让其他类继承,该类实现了Map中的大部分API,其他Map的具体实现就可以通过直接继承AbatractMap类即可。查询API文档可以知道AbstractMap比Map接口多了两个方法(除了AbstractMap继承Object的方法

clone()
          返回此 AbstractMap 实例的浅表副本:不复制键和值本身。

toString()
          返回此映射的字符串表示形式。


  3. SortedMap也是一个接口,它继承与Map接口。SortedMap中的内容与Map中的区别在于,它是有序的键值对,里面排序的方法是通过比较器(Comparator)实现的。

 4. NavigableMap也是一个接口,它继承与SortedMap接口,所以它肯定也是有序的,另外,NavigableMap还有一些导航的方法:lowerEntryfloorEntryceilingEntryhigherEntry 分别返回与小于、小于等于、大于等于、大于给定键的键关联的 Map.Entry 对象,如果不存在这样的键,则返回null。类似地,方法lowerKeyfloorKeyceilingKeyhigherKey 只返回关联的键。所有这些方法是为查找条目而不是遍历条目而设计的。 

 5. 再往下就是具体实现类了,TreeMap继承与AbstractMap,同时实现了NavigableMap接口。因此,TreeMap中的内容是有序键值对

 6. HashMap仅仅是继承了AbstractMap,并没有实现NavigableMap接口。因此,HashMap的内容仅是键值对而已,不保证有序

  7. WeakHashMap也是仅仅继承了AbstractMap,它和HashMap的区别是键类型不同,WeakHashMap的键是弱键

  8. HashTable虽然不是继承与AbstractMap,但是它继承与Dictionary(Dictionary也是键值对的接口),而且也实现了Map接口。因此,HashTable的内容也是键值对,且不保证顺序。但是和HashMap相比,HashTable是线程安全的,而且它支持通过Enumeration去遍历。



map:

package java.util;  
  
public interface Map<K,V> {  
    boolean isEmpty();  
    boolean containsKey(Object key);  
    boolean containsValue(Object value);  
    V get(Object key);  
    V put(K key, V value);  
    V remove(Object key);  
    void putAll(Map<? extends K, ? extends V> m);  
    void clear();  
    Set<K> keySet(); //保存key的Set  
    Collection<V> values(); //保存value的Collection  
    Set<Map.Entry<K, V>> entrySet(); //保存Map.Entry的Set  
    interface Entry<K,V> { //Map内部的一个接口,Entry中封装了key和value信息  
        K getKey();  
        V getValue();  
        V setValue(V value);  
        boolean equals(Object o);  
        int hashCode();  
    }  
    boolean equals(Object o);  
    int hashCode();  
  
}  
  由上面的源码可知:

    1. Map提供了一些接口分别用于返回键集、值集以及键值映射关系集。

        keySet()用于返回键的Set集合;

        values()用于返回值的Set集合;

        entrySet()用于返回键值集的Set集合,键值信息封装在Entry中。

    2. Map还对外提供了“获取键”、“根据键获取值”、“是否包含某个键或值”等等方法。

    3. Map.Entry是Map内部的一个接口,Map.Entry是一个键值对,我们要想获取Map中的Map中的键值对,可以通过Map.entrySet()来获取,获取到的是一个装着Map.Entry的集合,然后可以通过这个Entry来实现对键值的操作。









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值