我们在学习collection(集合)的时候,必然少不了和Iterator打交道,本文将介绍一下Iterator的相关概念和用法
1.collection
先来说说collection,collection是存储一些相同类型对象的集合,下面我介绍一下collection中用到最多的一些方法
public interface Collection<anytype>{
int size();
boolean isEmpty();
void clear();
boolean contains(anytype x);
boolean add(anytype x);
boolean remove(anytype x);
java.util.Iterator<anytype> iterator();
}
collection接口中从它的这些方法的英文名字可以很容易知道方法是用来干嘛的,size就是集合中元素的个数;isEmpty()就是判断集合是否为空,如果为空则返回true,否则返回false;clear()方法清空该集合;contains(anytype x)判断集合是包含x,有就返回true,否则返回false;add、remove在集合中添加、删除元素,添加、删除成功则返回true,否则返回false(例如删除时集合没有指定要删除的元素);
2.Iterator接口
collection接口扩展了Iterator接口,实现Iterator的类可以实现增强的for循环,例如我要循环遍历该集合中的元素,除了可以使用for循环外,还可以使用Iterator,我们来看看for循环的代码
foreach
public static <anytype> void print(Collection<anytype x>){
for(anytype item: x){
print(item);
}
}
而Iterator的,必须提供一个称谓iterator的方法,它返回一个Iterator的对象
public interface Iterator<anytype>{
boolean hasNext();
anytype nex();
void remove();
}
Iterator的思路是:通过iterator()方法,每个集合都可以创建并返回给客户实现Iterator接口的对象,并将当前位置的概念在对象内部存储下来。
接下来就是Iterator的用法
public static <anytype> void print(Collection<anytype> coll){
Iterator<anytype> itr = coll.iterator();
while(itr.hasNext()){
anytype item = itr.next();
System.out.println(item);
}
}
一般来说,iterator基本用来做集合的简单遍历,它提供的方法有限,hasNext()方法判断是否有下一个元素,有就返回true,否则返回false;next()方法每次都会给出集合的下一项,就是说第一次调用的时候给出第1项的下一项,第二次调用的时候给出第2项的下一项;
需要注意的是,Iterator接口提供的remove方法,该方法可以删除最新next()方法返回的这一项(此后不能再调用remove方法,直到对next()方法的再一次调用),特别需要注意的一点是,Iterator提供的remove如果被迭代的集合正在进行结构上的改变,那么此时remove的方法是不合法的,就是说如果在迭代时,该集合在添加元素或者删除元素,此时如果调用remove方法就会抛出异常(CurrentModificationException)。