1、迭代器的创建和使用
利用Iterator接口创建迭代器,Iterator接口位于java.util包下。Iterator接口中有3个方法。
- hasNext():如果仍有元素可以迭代,则返回true。
- next():返回迭代的下一个元素。
- remove():从迭代器指向的collection中移除迭代器返回的最后一个元素(可选操作)。
ListIterator接口继承了Iterator接口,下面通过一个简单的实例演示迭代器的用法。
例1:创建ListIteratorDemo类,在main()方法中创建一个ArrayList对象,然后打印集合中的元素和位置等信息。
package test;
import java.util.*;
public class Main{
public static void main(String[] args){
//创建一个ArrayList,其中能够保存的数据类型是Integer
ArrayList<Integer> array = new ArrayList<Integer>();
Collections.addAll(array,1,2,3,4,5,6);
System.out.println("集合中的元素:"+array);
ListIterator<Integer> iterator = array.listIterator();
boolean hasNext = iterator.hasNext();
System.out.println("集合中是否具有下一个元素:"+hasNext);
boolean hasPrevious = iterator.hasPrevious();
System.out.println("集合是否具有前一个元素:"+hasPrevious);
int next = iterator.next();
System.out.println("获得集合的下一个元素:"+next);
int nextIndex = iterator.nextIndex();
System.out.println("获得集合的下一个元素的索引:"+nextIndex);
int previous = iterator.nextIndex();
System.out.println("获得集合的前一个元素;"+previous);
int previousIndex = iterator.previousIndex();
System.out.println("获得集合的前一个元素的索引:"+previousIndex);
iterator.add(7);
System.out.println("向集合中添加元素7后的集合:"+array);
iterator.next();
iterator.set(12);
System.out.println("将获得的下一个元素修改成12后的集合:"+array);
iterator.remove();
System.out.println("将获得的下一个元素删除后的集合:"+array);
}
}
获得的集合的前一个元素的索引不一样。向集合中添加元素的位置也不一样。为什么???
例2:Iterator遍历ArrayList
package test;
import java.util.*;
public class Main{
public static void main(String[] args){
List<Integer> list = new ArrayList<Integer>();//创建列表
for(int i = 0;i < 10;i++){
list.add(i);
}
System.out.println("列表中的全部元素:");
for(Iterator<Integer> it = list.iterator();it.hasNext();){
System.out.print(it.next()+" ");
}
}
}
例3: ListIterator遍历ArrayList
对于列表而言,除了Iterator,java语言还提供了一个功能更加强大的ListIterator,它可以实现逆序遍历列表中的元素。本范例将使用其逆序遍历ArrayList。
package test;
import java.util.*;
public class Main{
public static void main(String[] args){
List<Integer> list = new ArrayList<Integer>();
for(int i = 0;i < 10;i++){
list.add(i);
}
System.out.println("列表中的全部元素:"+list);
System.out.println("逆序输出列表中的元素:");
ListIterator<Integer> li = list.listIterator();//必须放到这里,因为是两个for,放到for里就成了局部变量了
for(li = list.listIterator();li.hasNext();){//将游标定位到列表结尾
li.next();
}
for(;li.hasPrevious();){
System.out.print(li.previous()+" ");
}
}
}