软件包java.util迭代器(Iterator);官方介绍对collection进行迭代的迭代器。迭代器取代了java.collection.Framework中的Enumeration。迭代器与枚举的不同点:
- 迭代器允许调用者利用定义良好的语义在迭代期间从迭代器所指向的 collection 移除元素。
- 方法名称得到了改进。
属于java.collection.Framework中的成员。
三个原始方法:
boolean hasNext();
//如果仍有元素可以迭代,则返回true.
判断一组对象迭代的过程中,是否有下一个元素需要迭代,对象末尾或没有元素则返回false不需要迭代。
E next();
//返回迭代器中的下一个元素。
default void remove() {
throw new UnsupportedOperationException("remove");
}
从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。每次调用 next 只能调用一次此方法。如果进行迭代时用调用此方法之外的其他方式修改了该迭代器所指向的 collection,则迭代器的行为是不确定的。
default void forEachRemaining(Consumer<? super E> action) {
Objects.requireNonNull(action);
while (hasNext())
action.accept(next());
}
1.8新增的默认方法,
对每个剩余元素执行给定的操作,直到所有元素都被处理或动作引发异常。 如果指定了该顺序,则按迭代的顺序执行操作。 动作抛出的异常被转发给调用者。
public interface ListIterator<E> extends Iterator<E>
用于允许程序员沿任一方向遍历列表的列表的迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置。
ListIterator
没有电流元素; 其光标位置始终位于通过调用previous()
返回的元素和通过调用next()
返回的元素next()
。
长度为n
的列表的迭代器具有n+1
可能的光标位置,如下图所示的所示:
备注:向前遍历/向后遍历 隐藏光标在元素的前面或后面,两个元素的中间。
Element(0) Element(1) Element(2) ... Element(n-1)
cursor positions: ^ ^ ^ ^ ^
请注意, remove()
和set(Object)
方法未按光标位置进行定义; 它们被定义为对调用next()
或previous()
返回的最后一个元素进行操作。
//如果以逆向遍历列表,列表迭代器有多个元素,则返回 true。
boolean hasPrevious();
//返回列表中的前一个元素。
E previous();
//返回对 previous 的后续调用所返回元素的索引。
int previousIndex();
//用指定元素替换 next 或 previous 返回的最后一个元素(可选操作)。
用指定元素替换 next 或 previous 返回的最后一个元素(可选操作)。
只有在最后一次调用 next 或 previous 后既没有调用 ListIterator.remove
也没有调用 ListIterator.add 时才可以进行该调用。
void set(E e);
//将指定的元素插入列表(可选操作)。
该元素直接插入到 next 返回的下一个元素的前面(如果有),
或者 previous 返回的下一个元素之后(如果有);
如果列表没有元素,那么新元素就成为列表中的唯一元素。
新元素被插入到隐式光标前:不影响对 next 的后续调用,
并且对 previous 的后续调用会返回此新元素
(此调用把调用 nextIndex 或 previousIndex 所返回的值增加 1)。
void add(E e);