Collection概要
Collection接口Collection是一个接口,它的主要 分支为
List
和Set
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)
网友评论