Iterator ite = Set.iterator();
Iterator ite = List.iterator();
ListIterator listite = List.listIterator();
我们可以使用Iterator
来遍历Set
或List
或Map
。但ListIterator
只能用于遍历List
,它不能遍历Set
。为什么呢?
我知道主要区别在于,使用迭代器我们只能朝一个方向行进,但ListIterator
我们可以向两个方向行进。还有其他差异吗? ListIterator
优于Iterator
的任何优势?
答案 0 :(得分:143)
答案 1 :(得分:38)
有两点不同:
我们可以使用Iterator遍历Set和List以及Map类型的Objects。虽然ListIterator可用于遍历List-type对象,但不能用于Set-type of Objects。
也就是说,我们可以使用Set和List获取Iterator对象,请参见:
通过使用Iterator,我们只能从正向收集Collection Object中的元素。
迭代器中的方法:
hasNext()
next()
remove()
Iterator iterator = Set.iterator();
Iterator iterator = List.iterator();
但我们只从List界面获取ListIterator对象,请参见:
其中ListIterator允许您在任一方向上进行遍历(向前和向后)。因此除了Iterator之外,它还有两个方法,如hasPrevious()
和previous()
。此外,我们可以获取下一个或前一个元素的索引(分别使用nextIndex()
和previousIndex()
)
ListIterator中的方法:
ListIterator listiterator = List.listIterator();
即,我们无法从Set界面获取ListIterator对象。
参考: - What is the difference between Iterator and ListIterator ?
答案 2 :(得分:24)
Iterator是ListIterator的超类。
以下是它们之间的区别:
iterator
,您只能向前移动,但使用ListIterator
,您也可以在阅读元素时移动后备词。ListIterator
,您可以在遍历时随时获取索引,这是iterator
s无法实现的。iterator
,您只能检查下一个可用元素,但在listiterator
中,您可以检查上一个和下一个元素。listiterator
,您可以在任何时间点添加新元素,同时遍历。 iterator
无效。listiterator
,您可以在遍历时修改元素,这对于iterator
是不可能的。迭代器外观:
public interface Iterator<E> {
boolean hasNext();
E next();
void remove(); //optional-->use only once with next(),
dont use it when u use for:each
}
ListIterator外观:
public interface ListIterator<E> extends Iterator<E> {
boolean hasNext();
E next();
boolean hasPrevious();
E previous();
int nextIndex();
int previousIndex();
void remove(); //optional
void set(E e); //optional
void add(E e); //optional
}
答案 3 :(得分:2)
ListIterator
优于Iterator
的优点是我们可以在使用ListIterator遍历列表时随时添加元素。
答案 4 :(得分:0)
以下是iterator和listIterator的区别
迭代器:
boolean hasNext();
E next();
void remove();
列表迭代器:
boolean hasNext();
E next();
boolean hasPrevious();
E previous();
int nextIndex();
int previousIndex();
void remove();
void set(E e);
void add(E e);