[英]Difference between Iterator and Listiterator?
Iterator ite = Set.iterator();
Iterator ite = List.iterator();
ListIterator listite = List.listIterator();
我们可以使用Iterator
来遍历Set
或List
或Map
。 但是ListIterator
只能用于遍历List
,不能遍历Set
。 为什么?
我知道主要的区别在于,使用迭代器我们只能在一个方向上行驶,而使用ListIterator
我们可以在两个方向上行驶。 还有其他区别吗? ListIterator
比Iterator
什么优势?
有两个区别:
我们可以使用 Iterator 来遍历 Set 和 List 以及 Map 类型的对象。 虽然 ListIterator 可用于遍历 List 类型的对象,但不适用于 Set 类型的对象。
也就是说,我们可以通过使用 Set 和 List 来获取一个 Iterator 对象,参见这里:
通过使用迭代器,我们可以仅向前检索集合对象中的元素。
迭代器中的方法:
hasNext()
next()
remove()
Iterator iterator = Set.iterator(); Iterator iterator = List.iterator();
但是我们只能从 List 接口获取 ListIterator 对象,请看这里:
其中 ListIterator 允许您在任一方向(向前和向后)遍历。 因此,除了 Iterator 的方法hasPrevious()
它还有两个方法,如hasPrevious()
和previous()
。 此外,我们可以获取下一个或上一个元素的索引(分别使用nextIndex()
和previousIndex()
)
ListIterator 中的方法:
ListIterator listiterator = List.listIterator();
即,我们无法从 Set 接口获取 ListIterator 对象。
Iterator 是 ListIterator 的超类。
以下是它们之间的区别:
iterator
您只能向前移动,但使用ListIterator
您也可以在读取元素时向后移动。ListIterator
您可以在遍历时随时获取索引,而使用iterator
则无法实现。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
}
ListIterator
优于Iterator
优点是我们可以在使用ListIterator 遍历列表的任何时间添加元素 。
下面是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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.