一Iterator接口
迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层
结构。迭代器通常被称为"轻量级"对象,因为创建它的代价小。
Java中的迭代器(Iterator)给我们提供了一种通用的方式来访问集合中的元素。可以知道的是,它只是提供了一个
接口,并没有提供真正的Iterator类。Iterator是对collection进行迭代的迭代器。
Iterator接口定义了如下的方法:
Java中的Iterator功能比较简单,并且只能单向移动:
(1)使用方法iterator()要求容器返回一个Iterator对象。第一次调用Iterator的next()方法时,它返回序列的第一个元
素。
(2)使用next()获得序列中的下一个元素。(3)使用hasNext()检查序列中是否还有元素,如果仍有元素可以迭代,则返回 true。
(4)使用remove()将迭代器新返回的元素删除。该方法是在迭代过程中删除元素的唯一的安全方法。
二Iterable接口
Java中还提供了一个Iterable接口,Iterable接口实现后的功能是"返回"一个迭代器,该接口的iterator()方法返回一
个标准的Iterator实现。实现这个接口允许对象成为foreach语句的目标。就可以通过foreach语法遍历你的底层序列。
Iterable接口包含一个能够产生Iterator的iterator()方法,并且Iterable接口被foreach用来在序列中移动。因此如果
创建了任何实现Iterable接口的类,都可以将它用于foreach语句中。
Iterable接口中定义唯一的方法:
所有实现了Collection接口的集合类型都有一个iterator()方法用以返回一个实现了Iterator接口的对象。Iterator对象
称作迭代器,用以方便的实现对象容器内元素的遍历操作。
三示例
就像上面所说的,在Java的Iterator借口中定义了三个方法:hasNext()如果仍有元素可以迭代,则返回true;next()
返回迭代的下一个元素;remove()从迭代器指向的collection 中移除迭代器返回的最后一个元素。
我们可以认为迭代器Iterator是指向两个元素之间的位置,我们可以使用hasNext()来判断当前位置后面是否还有元
素。使用next()方法返回后面的元素,并且将位置移动到下一个元素前的位置。对于remove()方法我们删除的是当前
位置前面的元素,所以我们在调用remove()方法之前必须先调用至少一次next()方法。这里所说的迭代器的位置在被
迭代的对象中并不存在的,只是我们为了准确的说明这个方法,而假想出来的。
我们可以使用三种循环体遍历Java集合中的元素:
(1)使用while循环遍历
实例:
import java.util.*;
public class Test{
public static void main(String[] args){
List list = new ArrayList();
list.add("aa");
list.add("bb");
list.add("cc");
//使用while循环遍历集合中的元素
//使用集合的iterator()返回一个Iterator对象
Iterator iter = list.iterator();
//使用hasNext()方法判断是否有下一个元素
while(iter.hasNext()){
//使用next()方法返回元素
String str = (String)iter.next();
System.out.println(str);
}
}
}
运行结果:
(2)使用for循环遍历
实例:
import java.util.*;
public class Test{
public static void main(String[] args){
List list = new ArrayList();
list.add("one");
list.add("two");
list.add("three");
//使用for循环遍历集合中的元素
for(Iterator iter = list.iterator(); iter.hasNext();){
String str = (String)iter.next();
System.out.println(str);
}
}
}
运行结果:
(3)使用foreach语句遍历
所谓的foreach语句指的是jdk 5.0新增的的一个循环结构,可以用来处理集合中的每个元素而不用考虑集合定下
标。foreach语句对于遍历array或Collection的时候相当简便。可以看到的是,我们在前面的学习的过程过程中遍历集
合中的元素对象都是使用的这种方式。
格式如下:
for(variable:collection){
statement;
}
实例:
import java.util.*;
public class Test{
public static void main(String[] args){
//定义的数组
int[] arr = {1,2,3,4,5};
for(int i : arr){
System.out.println(i);
}
System.out.println("-----------------");
//定义的集合
List l = new ArrayList();
l.add(new String("aaa"));
l.add(new String("bbb"));
l.add(new String("ccc"));
for(Object o : l){
System.out.println(o);
}
}
}
运行结果:
当然使用foreach循环结构也有缺陷:如果遍历数组会很不方便的访问到下标值:如果遍历集合那么与与使用
Iterator相比,不能方便的删除集合中的内容。除了简单遍历并读出其中的内容外,不建议使用foreach循环结构。
在网上查询资料的时候看了好多关于Java迭代器的使用文章,看到了一篇很详细的文章,地址是Java迭代器
(转)(iterator详解以及和for循环的区别) ,写的还不错。我们学习的时候最主要的就是借助于Java API。因此经常查
API,学会使用API,我们编写程序的代码会更上一层楼。