JDK8常用集合类自上而下的关系

来源:互联网 发布:软件502 bad gateway 编辑:程序博客网 时间:2024/05/25 23:27

在Java中,集合类主要分为4大部分:Queue、Map、List、Set.

1. 首先来看一下顶层接口Collection接口:

public interface Collection<E> extends Iterable<E> {

由上述代码可见,集合类的顶层接口Collection扩展了Iterable接口;

2. 在顶层接口的下一层为AbstractCollection虚类,虚类实现了Collection中的部分方法;

public abstract class AbstractCollection<E> implements Collection<E> {

3. Set、Queue、Map、List

3.1 List

List接口是list的顶层接口,List接口定义如下:

public interface List<E> extends Collection<E> 

由上可见,List接口扩展了Collection接口。

list集合的顶层类为AbstractList虚类:

public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> 

由上可见,list顶层类AbstractList是一个虚类,AbstractList扩展了AbstractCollection类。

而我们常用的ArrayList、LinkedList都是扩展了AbstractList类:

//ArrayList类public class ArrayList<E> extends AbstractList<E>        implements List<E>, RandomAccess, Cloneable, java.io.Serializable;//LinkedList类没有直接继承AbstractList类,而是通过AbstractSequentialList类间接继承了AbstractListpublic class LinkedList<E>    extends AbstractSequentialList<E>    implements List<E>, Deque<E>, Cloneable, java.io.Serializablepublic abstract class AbstractSequentialList<E> extends AbstractList<E> ;

3.2 Map

Map接口定义如下:

public interface Map<K,V> ;

由上可见Map接口并没有继承Collection接口;
Map接口的顶层类为AbstractMap,定义如下:

public abstract class AbstractMap<K,V> implements Map<K,V> ;

由上可见,AbstractMap为抽象类,没有继承AbstractCollection抽象类。
常用的HashMap以及ConcurrentHashMap的定义如下:

//HashMap的定义,可见HashMap继承了AbstractMap类。public class HashMap<K,V> extends AbstractMap<K,V>    implements Map<K,V>, Cloneable, Serializable;//ConcurrentHashMap类的定义,可见ConcurrentHashMap同样继承了AbstractMappublic class ConcurrentHashMap<K,V> extends AbstractMap<K,V>    implements ConcurrentMap<K,V>, Serializable {

3.3 Set

Set接口的定义如下:

public interface Set<E> extends Collection<E> ;

由上可见,Map接口继承了Collection接口;
Set接口的顶层类为AbstractSet抽象类,定义如下:

public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> ;

由上可见,AbstractSet继承了AbstractCollection类。
常用的HashSet、TreeSet类的定义如下:

//HashSet类的定义,可见HashSet继承了AbstractSet抽象类public class HashSet<E>    extends AbstractSet<E>    implements Set<E>, Cloneable, java.io.Serializable//TreeSet类的定义,可见TreeSet继承了AbstractSet抽象类public class TreeSet<E> extends AbstractSet<E>    implements NavigableSet<E>, Cloneable, java.io.Serializable

3.4 Queue

Queue接口的定义如下:

public interface Queue<E> extends Collection<E> ;

由上可见,Queue接口继承了Collection接口;
Queue接口的顶层类为AbstractQueue抽象类,定义如下:

public abstract class AbstractQueue<E>    extends AbstractCollection<E>    implements Queue<E> {

由上可见,AbstractQueue抽象类继承了AbstractCollection类。

原创粉丝点击