问题
Iterator ite = Set.iterator();
Iterator ite = List.iterator();
ListIterator listite = List.listIterator();
我们可以使用Iterator
来遍历aSet
或aList
或aMap
。但352729909只能用于遍历aList
,它不能遍历aSet
。为什么?
我知道主要的区别在于,使用迭代器我们只能在一个方向上行进,但是我们可以在ListIterator
两个方向上行进。还有其他差异吗?和280101344的任何优点是Iterator
?
#1 热门回答(131 赞)
这些差异列在Javadoc forListIterator中
你可以
- 向后迭代
- 随时获取迭代器。
- 随时添加新值。
- 在该点设置新值。
#2 热门回答(35 赞)
有两点不同:
- 我们可以使用Iterator遍历Set和List以及Map类型的Objects。虽然ListIterator可用于遍历List-type对象,但不能用于Set-type of Objects。也就是说,我们可以通过使用Set和List来获取Iterator对象,请参见此处:通过使用Iterator,我们可以仅向前检索Collection Object中的元素。 Iterator中的方法:hasNext()next()remove()Iterator iterator = Set.iterator();
Iterator iterator = List.iterator(); - 但我们只从List接口获取ListIterator对象,请参见此处:ListIterator允许你在任何方向上进行遍历(向前和向后)。所以除了Iterator之外,还有两个方法,如hasPrevious()和previous()。此外,我们可以获取下一个或前一个元素的索引(分别使用nextIndex()和previousIndex())ListIterator中的方法:hasNext()next()previous()hasPrevious()remove()nextIndex()previousIndex()ListIterator listiterator = List.listIterator();即,我们无法从Set接口获取ListIterator对象。
参考:-What is the difference between Iterator and ListIterator ?
#3 热门回答(22 赞)
Iterator是ListIterator的超类。
以下是它们之间的差异:
- 使用迭代器,你只能向前移动,但使用ListIterator,你也可以在读取元素时移动后备词。
- 使用ListIterator,你可以在遍历时随时获取索引,这对于迭代器是不可能的。
- 使用迭代器,你只能检查下一个可用元素,但在listiterator中,你可以检查上一个和下一个元素。
- 使用listiterator,你可以在遍历的任何时间点添加新元素。迭代器不可能。
- 使用listiterator,你可以在遍历时修改元素,这对于迭代器是不可能的。
迭代器外观:
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
}