用几张图捋完集合的继承实现关系
难得这几天都比较闲,所以有时间弄弄博客。刚好在忘了集合的那些继承关系,就顺便整理了一下,而我们平时常见的List,Set,Map,Queue等都有着对应的继承体系。这里只列举了所用的抽象类和常见的实现类,毕竟实现类真的列举起来就没完没了。
抽象类继承关系
如下图所示,List,Set和Queue类型的集合都是有着自己对应的AbstractList,AbstractSet和AbstractQueue基类,而这三个基类都继承自AbstractCollection
这里我们发现,说好的Map呢?别急,Map的继承体系在这
那AbstractMap就是平时我们接触的那些Map的基类吗,对,这里一点质疑都不需要,就是这样的。Map和Collection是相对的两个集合体系
public abstract class AbstractMap<K,V> implements Map<K,V> {...}
public abstract class AbstractCollection<E> implements Collection<E> {...}
这里我们要问下,我们平时做面试题的时候会碰到跟HashMap比较的HashTable是什么?那在这里说明下,HashTable属于Map的体系,但是其基类并非AbstractMap,而是Dictionary
public class Hashtable<K,V>
extends Dictionary<K,V>
implements Map<K,V>, Cloneable, java.io.Serializable {...}
好的,看完继承关系以后,我们可以继续看接口的。
接口继承关系
我们平时所说,这是个List,这是个Map,这个是Set在更多的时候是说其实现的是哪个体系的具体接口。
关于Map体系
像Map是一个接口,而我们平时的HashMap,WeakHashMap都是实现了Map接口。
关于Collection体系
Collection的接口如下
首先AbstractCollection是实现了Collection接口,而作为AbstractCollection子类的AbstractList,AbstractQueue和AbstractSet分别实现了Collection接口的扩展类包括List接口,Queue接口和Set接口,Collection接口的基类是Iterable类
Collection之List
所以我们可以说ArrayList,Vector作为AbstractList的子类,都是List接口实现对象。后面Set和Queue同理
而具体的实现类中也不乏实现多接口的情况,如LinkedList(有兴趣了解源码分析的可以参考我的《LinkedList 插入 源码分析》)
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>{...}
Collection之Set
Collection之Queue
队列这个可能平时比较少介绍到
上一篇: collection
下一篇: Python自动监控网站并发送邮件告警
推荐阅读