JDK Collection 源码分析(1)—— Collection

时间:2023-12-24 18:28:49

JDK Collection

  JDK Collection作为一个最顶层的接口(root interface),JDK并不提供该接口的直接实现,而是通过更加具体的子接口(sub interface)的实现。该接口存在是因为有时候需要更加通用的Collection来对元素进行操作,比如一个方法,接收一个Collection,那么就可以不考虑其具体到底是List还是Set之类的。

  其子接口的实现可以提供两种构造方法,一个是空构造方法,另一个是参数为Collection,这样可以实现将任意一个Collection的实现转换为当前实现的类型。JDK里面都遵循这个约定。至于是否实现同步则由实现类来决定。

Iterable接口

  实现该接口,可以使用foreach语句,如for (Item item : items)

该接口仅仅只有一个方法Iterator<T> iterator(),返回一个迭代器。

Iterator

  迭代器设计模式,通过迭代器,可以实现所有的Collection遍历方式都是一样的,并且对外隐藏了每个具体类的内部遍历方式。

  ListIterator该子接口用于遍历List。

AbstractCollection抽象类

  该类实现了Collection接口,用于提供一个骨架,可以减少实现Collection接口的工作量,采用模板方法设计模式,抽象出了sizeiterator方法,这样其他只读的方法都可以调用那两个方法,即如果只需要实现只读集合,可以只实现那两个方法。如果要实现可修改的,就要实现另外两个方法:additerator.remove方法。

例如:

	public abstract Iterator<E> iterator();

    public boolean contains(Object o) {
Iterator<E> it = iterator();
if (o==null) {
while (it.hasNext())
if (it.next()==null)
return true;
} else {
while (it.hasNext())
if (o.equals(it.next()))
return true;
}
return false;
}