将集合的接口与实现分离
接口与实现分离以后,接口只提供方法名,实现由每个类自己完成,这样的话你想怎样实现就怎样实现。如下所示,这只是一个接口,具体实现不归它管。
public interface Queue<E> / / a si mp 1 ifi ed form of the interface in the standard 1 i brary
{
void add(E element);
E remove();
int size();
}
上述接口的实现可以用数组,也可以用链表,当然,这些都是由重写这个接口的类来完成。
在定义集合类对象的时候,可以使用接口来存放集合的引用。
像AbstractQueue这样以Abstract开头的类是为类库实现者设计的。
Collection接口
在java类库中,集合类的基本接口是Collection接口。这个接口有两个基本方法。
public interface Coll ecti on<E>
{
}
boolean add (E element) ;
Iterator<E> iterator();
add方法用于向集合中添加元素。
Iterator方法用于返回一个实现了Iterator接口的对象。
此接口扩展了Iterator接口,所以对于标准类库中的任何集合都可以使用“for each”循环
。
迭代器
Iterator接口包含了4个方法
public interface Iterator<E>
E next();
boolean hasNext () ;
void remove() ;
default void forEachRemai ni ng (Consumer<? super E> action) ;
}
当然也可以用for each循环简单地写:
for (String element : c)
{
do something with element
}
对于java迭代器,可以将其理解为位于两个元素之间,即不是指向元素的,而是指向下一个元素和上一个元素中间的位置。
更重要的是,next和remove方法的调用具有依赖性,在调用remove之前需要调用next,不然将会抛出一个IllegalStateException异常。