美文网首页
Collection架构

Collection架构

作者: high5130 | 来源:发表于2018-08-21 17:26 被阅读0次

Collection概要

Collection接口
Collection是一个接口,它的主要 分支为ListSet

List和Set都是接口,它们继承自Collection,List是有序队列,List中可以有重复元素;而Set是数学概念中的集合,不能有重复元素。

List实现类继承了AbstractList,Set实现类继承了AbstractSet,然后它们都继承了AbstractCollection,AbstractCollection是一个实现了Collection的抽象类,实现了其中的绝大部分函数;这样,在Collection的实现类中,我们就可以通过继承AbstractCollection省去重复编码。

Collection中有一个iterator()函数,它的作用是返回一个Iterator接口。通常,我们可以通过Iterator迭代器来遍历集合。ListIterator是List接口所特有的,在List接口中,通过ListIterator()返回一个ListIterator对象。

下面我们将对各个接口和抽象类做一下简单介绍

1 Collection简介

Collection的定义如下:

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

它是一个接口,是高度抽象出来的集合,它包含了集合的基本操作:添加、删除、清空、遍历(读取)、是否为空、获取大小、是否保护某元素等。

Collection接口的所有子类(直接子类和间接子类)都必须实现2种构造函数:不带参数的构造函数 和 参数为Collection的构造函数。带参数的构造函数,可以用来转换Collection的类型。

//Collection的Api
abstract boolean         add(E e)
abstract boolean         addAll(Collection<? extends E> c)
abstract void            clear()
abstract boolean         contains(Object o)
abstract boolean         containsAll(Collection<?> c)
abstract boolean         equals(Object o)
abstract int             hashCode()
abstract boolean         isEmpty()
abstract Iterator<E>     iterator()
abstract boolean         remove(Object o)
abstract boolean         removeAll(Collection<?> c)
abstract boolean         retainAll(Collection<?> c)
abstract int             size()
abstract <T> T[]         toArray(T[] a)
abstract Object[]        toArray()

2 List简介

List的定义如下

public interface List<E> extends Collection<E> {}

List是一个有序的Collection,每个元素都有索引, 可以对每个元素的插入进行精准的控制,用户也可以根据相关索引进行数据的访问,并搜索其中的元素。

//List的Api
abstract boolean         add(E e)
abstract boolean         addAll(Collection<? extends E> c)
abstract void            clear()
abstract boolean         contains(Object o)
abstract boolean         containsAll(Collection<?> c)
abstract boolean         equals(Object o)
abstract int             hashCode()
abstract boolean         isEmpty()
abstract Iterator<E>     iterator()
abstract boolean         remove(Object o)
abstract boolean         removeAll(Collection<?> c)
abstract boolean         retainAll(Collection<?> c)
abstract int             size()
abstract <T> T[]         toArray(T[] a)
abstract Object[]        toArray()
// 相比与Collection,List新增的API:
abstract void             add(int index, E o)
abstract boolean          addAll(int index, Collection<? extends E> c)
abstract E                get(int index)
abstract int              indexOf(Object o)
abstract int              lastIndexOf(Object o)
abstract ListIterator<E>  listIterator(int index)
abstract ListIterator<E>  listIterator()
abstract E                remove(int index)
abstract E                set(int index, E element)
abstract List<E>          subList(int fromIndex, int toIndex)

3 Set简介

Set的定义如下

public interface Set<E> extends Collection<E> {}

Set不能有重复元素,就是e1.equals(e2)的元素对 e1 和 e2,并且null只能有一个,正如名称所示,此接口模仿了数学中的Set抽象

//Set的Api 
abstract boolean         add(E e)
abstract boolean         addAll(Collection<? extends E> c)
abstract void            clear()
abstract boolean         contains(Object o)
abstract boolean         containsAll(Collection<?> c)
abstract boolean         equals(Object o)
abstract int             hashCode()
abstract boolean         isEmpty()
abstract Iterator<E>     iterator()
abstract boolean         remove(Object o)
abstract boolean         removeAll(Collection<?> c)
abstract boolean         retainAll(Collection<?> c)
abstract int             size()
abstract <T> T[]         toArray(T[] a)
abstract Object[]        toArray()

4 AbstractCollection

AbstractCollection的定义如下

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

此类提供 Collection 接口的骨干实现,以最大限度地减少了实现此接口所需的工作。

5 AbstractList

AbstractList的定义如下

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

此类提供 List 接口的骨干实现,以最大限度地减少实现“随机访问”数据存储(如数组)支持的该接口所需的工作。对于连续的访问数据(如链表),应优先使用 AbstractSequentialList,而不是此类。

6 AbstractSet

AbstractSet的定义如下

public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> {}

此类提供 Set接口的骨干实现,以最大限度地减少实实现此类接口所需的工作

7 Iterator

Iterator的定义如下

public interface Iterator<E> {}

Iterator是一个接口,是Collection进行迭代的迭代器,迭代器取代了 Java Collections Framework 中的 Enumeration。迭代器与枚举有两点不同:
1、迭代器允许调用者利用定义良好的语义在迭代期间从迭代器所指向的 collection 移除元素。
2、方法名称得到了改进。

//Iterator Api
abstract boolean        hasNext()
abstract E              next();
abstract void           remove()

8 ListIterator

ListIterator的定义如下

public interface ListIterator<E> extends Iterator<E> {}

ListIterator继承了Iterator,在Iterator基础上添加了一系列方法,它是队列迭代器,专门用于便利list的迭代,可以向前和向后对列表进行迭代;ListIterator没有当前元素;它的光标位置 始终位于调用 previous() 所返回的元素和调用 next() 所返回的元素之间。长度为 n 的列表的迭代器有 n+1 个可能的指针位置。

注意,remove() 和 set(Object) 方法不是 根据光标位置定义的;它们是根据对调用 next() 或 previous() 所返回的最后一个元素的操作定义的。

//Iterator Api
abstract boolean        hasNext()
abstract E              next()
abstract void           remove()
//ListIterator添加的Api
abstract boolean        hasPrevious()
abstract E              previous()
abstract int            nextIndex()
abstract  int           previousIndex()
abstract  void          set(E e);
abstract  void           add(E e)

相关文章

网友评论

      本文标题:Collection架构

      本文链接:https://www.haomeiwen.com/subject/djsjiftx.html