迭代器

Iterator接口

实现代码:

1
2
3
4
5
6
7
8
9
10
11
ArrayList list = new ArrayList();
list.add("data1");
list.add("data2");
list.add("data3");
list.add("data4");
list.add("data5");
Iterator it = list.iterator();
while(it.hasNext()){
Object obj = it.next();
System.out.println(obj);
}

首先使用调用ArrayList集合的iterator()方法获得迭代器对象,然后使用hasNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取出,否则说明已到达了集合末尾,停止遍历元素。在通过next()方法取元素时,必须保证要获取的元素存在,否则,会抛出异常。

需要说明的是,当通过迭代器获取ArrayList集合中的元素时,都会将这些元素当作Object类型来看待,如果想得到特定类型的元素,则需要进行强制类型转换。

foreach循环

虽然Iterator可以用来遍历集合中的元素,但写法上比较繁琐,为了简化书写,从JDK5.0开始,提供了foreach循环。

实现代码:

1
2
3
4
5
6
7
8
9
ArrayList list = new ArrayList();
list.add("data1");
list.add("data2");
list.add("data3");
list.add("data4");
list.add("data5");
for(Object obj : list){
System.out.println(obj);
}

注意:当使用foreach循环遍历集合和数组时,只能访问集合中的元素,不能对其中的元素进行修改。

ListIterator接口

实现代码:

1
2
3
4
5
6
7
8
9
10
11
ArrayList list = new ArrayList();
list.add("data1");
list.add("data2");
list.add("data3");
list.add("data4");
list.add("data5");
ListIterator it = list.ListIterator();
while(it.hasPrevious()){
Object obj = it.previous();
System.out.println(obj+" ");
}

Iterator迭代器通过hasNext()方法和next()方法,迭代的方向是从集合中的第一个元素向最后一个元素迭代,就是所谓的正向迭代。

ListIterator正好相反,是用hasPrevious()和previous()方法来进行反向迭代。

需要注意的是, ListIterator迭代器只能用于List集合。

Enumeration接口

实现代码:

1
2
3
4
5
6
7
8
9
10
11
Vector v = new Vector();
list.add("data1");
list.add("data2");
list.add("data3");
list.add("data4");
list.add("data5");
Enumeration en = v.elements();
while(en.hasMoreElements()){
Object obj = en.nextElement();
System.out.println(obj);
}

这是Vector集合提供的一个方法,Vector集合前面讲过,就不细说了。

0%