Java中迭代器和ListIterator的区别
迭代器
Java 中的 Collection
框架中使用迭代器来逐个检索元素。它可以应用于任何 Collection
对象。通过使用迭代器,可以执行读取和删除操作。每当想要枚举所有 Collection
框架实现的接口(如 Set
、 List
、 Queue
、 Deque
)以及所有实现的 Map
接口类中的元素时,都必须使用迭代器。迭代器是整个集合框架唯一可用的游标。可以通过调用 Collection
接口中的 iterator()
方法来创建迭代器对象。
// Here "c" is any Collection object. itr is of
// type Iterator interface and refers to "c"\nIterator itr = c.iterator();
列表迭代器
它仅适用于 List
集合实现的类,如 arraylist
、 linkedlist
等。它提供双向迭代。当要枚举 List
的元素时,必须使用 ListIterator
。这个游标比迭代器有更多的功能(方法)。 ListIterator
对象可以通过调用 List
接口中的 listIterator()
方法来创建。
// Here "l" is any List object, ltr is of type
// ListIterator interface and refers to "l"\nListIterator ltr = l.listIterator();
Iterator 和 ListIterator 的区别:
区别1: Iterator
只能向前遍历,而 ListIterator
可以向前和向后遍历。
例子:
import java.io.*;
import java.util.*;
class IteratorDemo1 {
public static void main(String[] args)
{
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
// Iterator
Iterator itr = list.iterator();
System.out.println("Iterator:");
System.out.println("Forward traversal: ");
while (itr.hasNext()){
System.out.print(itr.next() + " ");
}
System.out.println();
// ListIterator
ListIterator i = list.listIterator();
System.out.println("ListIterator:");
System.out.println("Forward Traversal : ");
while (i.hasNext()){
System.out.print(i.next() + " ");
}
System.out.println();
System.out.println("Backward Traversal : ");
while (i.hasPrevious())
System.out.print(i.previous() + " ");
System.out.println();
}
}
运行结果:
Iterator:
Forward traversal:
1 2 3 4 5
ListIterator:
Forward Traversal :
1 2 3 4 5
Backward Traversal :
5 4 3 2 1
区别2: ListIterator
可以帮助替换元素,而 Iterator
不能。
例子:
import java.util.ArrayList;
import java.util.ListIterator;
public class geekdocsDemo {
public static void main(String[] args) {
ArrayList<Integer> aList = new ArrayList<Integer>();
aList.add(1);
aList.add(2);
aList.add(3);
aList.add(4);
aList.add(5);
System.out.println("Elements of ArrayList: ");
for (Integer i : aList) {
System.out.println(i);
}
ListIterator<Integer> l = aList.listIterator();
l.next();
l.set(80000);
System.out.println("Now the ArrayList" + " elements are: ");
for (Integer i : aList) {
System.out.println(i);
}
}
}
输出:
Elements of ArrayList:
1
2
3
4
5
Now the ArrayList elements are:
80000
2
3
4
5
Iterator 和 ListIterator 比较和区别
Iterator | ListIterator |
---|---|
只能向前遍历 Collection 中存在的元素 | 可以向前和向后遍历 Collection 中存在的元素 |
帮助遍历 Map、List 和 Set | 只能遍历 List 而不能遍历其他两个 |
使用迭代器无法获取索引 | 它具有 nextIndex() 和 previousIndex() 等方法,可以在遍历 List 时随时获取元素的索引 |
无法修改或替换集合中存在的元素 | 可以在 set(E e) 的帮助下修改或替换元素 |
无法添加元素并引发 ConcurrentModificationException |
可以随时轻松地将元素添加到集合中 |
Iterator 的某些方法是 next() 、 remove() 和 hasNext() |
ListIterator 的某些方法是 next() 、 previous() 、 hasNext() 、 hasPrevious() 和 add(E e) |