用几张图捋完集合的继承实现关系

难得这几天都比较闲,所以有时间弄弄博客。刚好在忘了集合的那些继承关系,就顺便整理了一下,而我们平时常见的List,Set,Map,Queue等都有着对应的继承体系。这里只列举了所用的抽象类和常见的实现类,毕竟实现类真的列举起来就没完没了。

抽象类继承关系

如下图所示,List,Set和Queue类型的集合都是有着自己对应的AbstractList,AbstractSet和AbstractQueue基类,而这三个基类都继承自AbstractCollection

用几张图捋完集合的继承实现关系_第1张图片

这里我们发现,说好的Map呢?别急,Map的继承体系在这

用几张图捋完集合的继承实现关系_第2张图片

 那AbstractMap就是平时我们接触的那些Map的基类吗,对,这里一点质疑都不需要,就是这样的。Map和Collection是相对的两个集合体系

public abstract class AbstractMap implements Map {...}
public abstract class AbstractCollection implements Collection {...}

这里我们要问下,我们平时做面试题的时候会碰到跟HashMap比较的HashTable是什么?那在这里说明下,HashTable属于Map的体系,但是其基类并非AbstractMap,而是Dictionary

public class Hashtable
    extends Dictionary
    implements Map, Cloneable, java.io.Serializable {...}

好的,看完继承关系以后,我们可以继续看接口的。

接口继承关系

我们平时所说,这是个List,这是个Map,这个是Set在更多的时候是说其实现的是哪个体系的具体接口。

关于Map体系

像Map是一个接口,而我们平时的HashMap,WeakHashMap都是实现了Map接口。

用几张图捋完集合的继承实现关系_第3张图片

关于Collection体系

Collection的接口如下

用几张图捋完集合的继承实现关系_第4张图片

首先AbstractCollection是实现了Collection接口,而作为AbstractCollection子类的AbstractList,AbstractQueue和AbstractSet分别实现了Collection接口的扩展类包括List接口,Queue接口和Set接口,Collection接口的基类是Iterable类

Collection之List

所以我们可以说ArrayList,Vector作为AbstractList的子类,都是List接口实现对象。后面Set和Queue同理

用几张图捋完集合的继承实现关系_第5张图片

而具体的实现类中也不乏实现多接口的情况,如LinkedList(有兴趣了解源码分析的可以参考我的《LinkedList 插入 源码分析》)

public class LinkedList
    extends AbstractSequentialList
    implements List, Deque{...}

用几张图捋完集合的继承实现关系_第6张图片

Collection之Set

用几张图捋完集合的继承实现关系_第7张图片

Collection之Queue

队列这个可能平时比较少介绍到

用几张图捋完集合的继承实现关系_第8张图片

你可能感兴趣的:(java)