在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类间接继承了AbstractList类
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable;
public 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同样继承了AbstractMap类
public 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类。