Java集合包(二)——Collection接口及其子接口、抽象类 原理分析  

Java集合包(二)——Collection接口及其子接口、抽象类 原理分析
 

转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/13560125.html

一:宏观架构

  Java集合包(二)——Collection接口及其子接口、抽象类 原理分析
 

  拆解记忆如下:

  1、接口: Collection接口是集合顶层接口,定义了集合类中最基本的一系列操作方法;

         Collection接口有两个主要的分支子接口,List 和 Set。

         List接口在Collection接口的基础上,新增了一系列特有的数组操作相关方法;

         Set接口与Collection接口一致,没有新增特有的操作方法;

  2、抽象类:AbstractCollection抽象类实现了Collection接口中的大部分方法;

         AbstractList抽象类继承了AbstractCollection并实现了List接口,基于AbstractCollection已实现的大部分集合方法的基础上,又实现了List接口中大部分新增的方法;

         AbstractSet抽象类继承了AbstractCollection并实现了Set接口,针对Set集合的特有属性,对AbstractCollection中的某些实现方法进行了重写;

  3、迭代接口:Collection中的iterator()方法会返回一个Iterator接口,定义了对通用集合类进行遍历的一系列方法;

                          ListIterator继承了Iterator接口,在List接口的ListIterator()方法返回一个ListIterator,额外增加了针对List进行遍历的一系列方法。

二:Collection接口

  它是集合类的最顶层接口,对集合操作进行了高度抽象,定义了集合的基本操作:添加、删除、清空、遍历、包含判断、判断是否为空、获取大小等。

// Collection的API
abstract boolean         add(E object)
abstract boolean         addAll(Collection<? extends E> collection)
abstract void clear()
abstract boolean contains(Object object) abstract boolean containsAll(Collection<?> collection)
abstract boolean equals(Object object) abstract int hashCode()
abstract boolean isEmpty()
abstract Iterator<E> iterator()
abstract boolean remove(Object object) abstract boolean removeAll(Collection<?> collection) abstract boolean retainAll(Collection<?> collection)
abstract int size()
abstract <T> T[] toArray(T[] array) abstract Object[] toArray()

三:List接口

  继承于Collection接口,包含了Collection中的全部方法接口;同时,它定义了自己额外的API。主要有“添加、删除、获取、修改指定位置的元素”、“获取List中的子队列”等。

// Collection的API
abstract boolean         add(E object)
abstract boolean         addAll(Collection<? extends E> collection)
abstract void            clear()
abstract boolean         contains(Object object)
abstract boolean         containsAll(Collection<?> collection)
abstract boolean         equals(Object object)
abstract int             hashCode()
abstract boolean         isEmpty()
abstract Iterator<E>     iterator()
abstract boolean         remove(Object object)
abstract boolean         removeAll(Collection<?> collection)
abstract boolean         retainAll(Collection<?> collection)
abstract int             size()
abstract <T> T[]         toArray(T[] array)
abstract Object[]        toArray()
// 相比与Collection,List新增的API:
abstract void                add(int location, E object)
abstract boolean             addAll(int location, Collection<? extends E> collection)
abstract E get(int location) abstract int indexOf(Object object) abstract int lastIndexOf(Object object)
abstract ListIterator<E> listIterator(int location) abstract ListIterator<E> listIterator()
abstract E remove(int location) abstract E set(int location, E object) abstract List<E> subList(int start, int end)

四:Set接口

  继承于Collection的接口,API和Collection完全一样,没有新增额外的接口。

// Set的API
abstract boolean         add(E object)
abstract boolean         addAll(Collection<? extends E> collection)
abstract void             clear()
abstract boolean         contains(Object object)
abstract boolean         containsAll(Collection<?> collection)
abstract boolean         equals(Object object)
abstract int             hashCode()
abstract boolean         isEmpty()
abstract Iterator<E>     iterator()
abstract boolean         remove(Object object)
abstract boolean         removeAll(Collection<?> collection)
abstract boolean         retainAll(Collection<?> collection)
abstract int             size()
abstract <T> T[]         toArray(T[] array)
abstract Object[]         toArray()

五:AbstractCollection抽象类

  它实现了Collection接口中,除iterator()和size()之外的所有集合操作方法。

  

六:AbstractList抽象类

  继承于AbstractCollection,并且实现List接口。

  它实现了List接口中的大部分函数,同时,在AbstractCollection的基础上实现了iterator()方法。

七:AbstractSet抽象类

  它实现了Set接口中的大部分函数,对于某些Set操作特有的,在AbstractCollection的基础上进行了重写。

八:Iterator接口

  它是集合的迭代器,提供了集合遍历的三个方法,包括:是否存在下一个元素、获取下一个元素、删除当前元素。

// Iterator的API
abstract boolean hasNext()
abstract E next()
abstract void remove()

九:ListIterator接口

  继承于Iterator的接口,它是List特有的迭代器,在Iterator的三个方法基础上,新增了 添加、是否存在上一个元素、获取上一个元素等API。

// 继承于Iterator的接口
abstract boolean hasNext()
abstract E next()
abstract void remove()

// ListIterator新增的API接口
abstract void add(E object)
abstract boolean hasPrevious()
abstract int nextIndex()
abstract E previous()
abstract int previousIndex()
abstract void set(E object)