您的位置:首页 > 编程语言 > Java开发

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

2016-09-19 15:06 393 查看
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还有一些导航的方法:
lowerEntry
floorEntry
ceilingEntry

higherEntry
分别返回与小于、小于等于、大于等于、大于给定键的键关联的
Map.Entry
对象,如果不存在这样的键,则返回
null
。类似地,方法
lowerKey
floorKey
ceilingKey
higherKey
只返回关联的键。所有这些方法是为查找条目而不是遍历条目而设计的。 

 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来实现对键值的操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: