java源码分析之集合框架Map 07
来源:互联网 发布:淘宝中文国际版app 编辑:程序博客网 时间:2024/06/11 06:35
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来实现对键值的操作。
- java源码分析之集合框架Map 07
- Java集合框架之Map---HashMap和LinkedHashMap源码分析
- Java集合框架之Map--Hashtable和Properties源码分析
- Java集合框架之Map---HashMap和LinkedHashMap源码分析
- Java集合框架源码分析之ArrayList
- Java集合框架源码分析之LinkedList
- java之集合框架源码分析
- Java集合框架06--Map架构与源码分析
- 《Java源码解析》集合框架Map之HashMap
- 《Java源码解析》集合框架Map之HashTable
- 《Java源码解析》集合框架Map之LinkedHashMap
- java集合框架07——Map架构与源码分析
- JAVA集合源码之路-Map分析(一)
- JAVA集合框架之Map
- java集合框架之Map
- Java集合框架之Map
- Java集合框架之Map
- java集合框架之map
- 利用runtime实现UIAlertView的block回调
- WPF-Dispatcher
- USACO2012 March Gold Large Banner
- iOS- Xcode8更新后输出log日志关闭
- mxnet深度学习实战:跑自己的数据实验和一些问题总结
- java源码分析之集合框架Map 07
- IE11 F12不能用的问题
- Hadoop中命令行解释
- 谈谈MySQL的存储引擎
- Raft算法分析与理解
- Perl语言入门(13 perl调试程序)
- 支付宝支付开发——当面付条码支付和扫码支付
- prunsrv 配置jar 为windows 服务
- 皮尔逊相关度系数原理,以及java实现