欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-23 14:18:00
...

难得这几天都比较闲,所以有时间弄弄博客。刚好在忘了集合的那些继承关系,就顺便整理了一下,而我们平时常见的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

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

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

相关标签: java Collection