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的方法)
返回此 AbstractMap 实例的浅表副本:不复制键和值本身。
返回此映射的字符串表示形式。
3. SortedMap也是一个接口,它继承与Map接口。SortedMap中的内容与Map中的区别在于,它是有序的键值对,里面排序的方法是通过比较器(Comparator)实现的。
4. NavigableMap也是一个接口,它继承与SortedMap接口,所以它肯定也是有序的,另外,NavigableMap还有一些导航的方法:
和
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:
1. Map提供了一些接口分别用于返回键集、值集以及键值映射关系集。
keySet()用于返回键的Set集合;
values()用于返回值的Set集合;
entrySet()用于返回键值集的Set集合,键值信息封装在Entry中。
2. Map还对外提供了“获取键”、“根据键获取值”、“是否包含某个键或值”等等方法。
3. Map.Entry是Map内部的一个接口,Map.Entry是一个键值对,我们要想获取Map中的Map中的键值对,可以通过Map.entrySet()来获取,获取到的是一个装着Map.Entry的集合,然后可以通过这个Entry来实现对键值的操作。
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来实现对键值的操作。
相关文章推荐
- Java 集合框架源码分析(六)——HashTable
- java源码分析之集合框架 fail-fast机制06
- java 集合框架之LinkedList及ListIterator实现源码分析
- java源码分析之集合框架HashMap 10
- java核心之集合框架——HashMap源码分析
- Java 集合框架源码分析(一)——ArrayList
- [jjzhu学java]之JDK集合框架源码分析
- Java 集合框架源码分析(二)——LinkedList
- 【Java8源码分析】集合框架-LinkedList
- 【Java8源码分析】集合框架-HashMap
- java源码分析之集合框架 LinkedList 04
- Java 集合框架源码分析(一)——ArrayList
- java源码分析之集合框架AbstractMap 08
- Java 集合框架源码分析(三)——HashMap
- Java 集合框架源码分析(五)——Vector
- Java 集合框架源码分析(七)——HashSet
- java源码分析之集合框架 ArrayList 03
- Java 集合框架源码分析(二)——LinkedList
- java核心之集合框架——ArrayList源码分析
- Java 集合框架源码分析(八)—— ConcurrentHashMap