Java Iterator(迭代器)


Java Iterator(迭代器)

在Java中,当需要遍历集合(Collection)类对象时,可以使用迭代器(Iterator)。

Iterator接口

Iterator接口是集合类对象迭代器的顶层接口。它有以下方法:

  • boolean hasNext(): 如果集合中有下一个元素,则返回true,否则返回false。
  • E next(): 返回下一个元素。
  • void remove(): 移除集合中最后返回的元素。如果调用next()方法之前没有调用remove()方法,或者调用了remove()方法又在此期间调用了其他方法,那么编译器会抛出IllegalStateException异常。

迭代器的使用

要使用迭代器,必须先通过集合类的iterator()方法获取迭代器对象。以下是示例代码:

List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Orange");
Iterator<String> itr = list.iterator();

while(itr.hasNext()){
    String element = itr.next();
    System.out.println(element);
}

其中,itr.hasNext()判断集合中是否有下一个元素,itr.next()返回下一个元素。以上代码将打印出:

Apple
Banana
Orange

迭代器的优点

相比普通for循环遍历,使用迭代器可以在遍历时同时进行删除某些元素操作。以下是示例代码:

List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Orange");
Iterator<String> itr = list.iterator();

while(itr.hasNext()){
    String element = itr.next();
    if(element.equals("Apple")){
        itr.remove();
    }
}

for(String s: list){
    System.out.println(s);
}

执行以上代码将打印出:

Banana
Orange

迭代器的缺点

迭代器在遍历时不能将集合进行修改,否则会抛出ConcurrentModificationException异常。以下是示例代码:

List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Orange");
Iterator<String> itr1 = list.iterator();
Iterator<String> itr2 = list.iterator();

while(itr1.hasNext()){
    String element = itr1.next();
    if(element.equals("Apple")){
        list.remove("Apple");
    }
}

while(itr2.hasNext()){
    String element = itr2.next();
    System.out.println(element);
}

以上代码会抛出ConcurrentModificationException异常。

总结

在Java中,使用迭代器遍历集合类对象可以方便且安全地对集合进行遍历和删除操作,但是需要注意不能在迭代器遍历期间修改集合,否则会抛出异常。