Iterater和ListIterator之间有什么区别?
Iterator
和 ListIterator
是 Java 集合框架中用于遍历集合的两种接口,它们之间有几个关键的区别:
适用的集合类型:
Iterator
可以用于任何实现了 Collection
接口的集合,如 ArrayList
、HashSet
、LinkedList
等。ListIterator
是 Iterator
的子接口,专门用于 List
接口的实现类,如 ArrayList
和 LinkedList
。方向:
Iterator
只能向前遍历集合中的元素。ListIterator
可以双向遍历,即可以向前和向后遍历元素。方法:
Iterator
提供的方法包括 hasNext()
、next()
和 remove()
。ListIterator
除了继承 Iterator
的方法外,还提供了额外的方法,如 hasPrevious()
、previous()
、nextIndex()
、previousIndex()
、set(E e)
和 add(E e)
。这些方法使得 ListIterator
更加灵活,能够在遍历过程中修改列表。修改集合:
Iterator
的 remove()
方法可以在遍历时安全地删除当前元素。ListIterator
的 add(E e)
方法可以在当前游标位置插入新元素,而 set(E e)
方法可以替换最后返回的元素。游标位置:
Iterator
的游标位置在当前元素之后。ListIterator
的游标位置可以在当前元素之前、当前元素之后,或者在列表的开头和结尾。import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class IteratorExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
// 使用 Iterator
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
System.out.println(element);
// iterator.remove(); // 可以在这里删除元素
}
// 使用 ListIterator
ListIterator<String> listIterator = list.listIterator();
while (listIterator.hasNext()) {
String element = listIterator.next();
System.out.println(element);
// listIterator.add("D"); // 可以在这里添加元素
}
}
}
总之,ListIterator
提供了比 Iterator
更丰富的功能,适用于需要在列表中进行更复杂操作的场景。