Java 集合 Iterator ListIterator

Java 集合 Iterator ListIterator,第1张

Java 集合 Iterator ListIterator Java Iterator 和 ListIterator Iterator

模块 java.base 软件包 java.util
Interface Iterator
参数类型

E - 此迭代器返回的元素类型

public interface Iterator

Iterator 是一个接口,它是集合的迭代器。Iterator 提供的 API 接口如下:

default void	forEachRemaining​(Consumer action)	对每个剩余元素执行给定 *** 作,直到处理完所有元素或 *** 作引发异常。
boolean hasNext() 如果迭代具有更多元素,则返回 true 。
E next() 返回迭代中的下一个元素。
default void	remove()	从底层集合中移除此迭代器返回的最后一个元素(可选 *** 作)。
import java.util.*;

ArrayList a = new ArrayList();
a.add("aaa");
a.add("bbb");
a.add("ccc");
System.out.println("Before iterate : " + a);
Iterator it = a.iterator();
while (it.hasNext()) {
    String t = it.next();
    if ("bbb".equals(t)) { it.remove(); }
}
System.out.println("After iterate : " + a);

注意:

  1. Iterator 只能单向移动;
  2. Iterator.remove() 是唯一安全的方式来在迭代过程中修改集合;如果在迭代过程中以任何其它的方式修改了基本集合将会产生未知的行为。而且每调用一次 next() 方法,remove() 方法只能被调用一次,如果违反这个规则将抛出一个异常。
ListIterator

模块 java.base 软件包 java.util
Interface ListIterator

All Superinterfaces:

Iterator

public interface ListIterator extends Iterator

列表的迭代器,允许程序员在任一方向上遍历列表,在迭代期间修改列表,并获取迭代器在列表中的当前位置。 ListIterator没有当前元素; 它的光标位置总是位于调用 previous() 返回的元素和调用 next() 返回的元素。 长度为 n 的列表的迭代器具有 n + 1 可能的光标位置,如下面的^ ( ^ )所示:

请注意, remove() 和 set(Object) 方法未根据光标位置定义; 它们被定义为对 next() 或 previous() 调用返回的最后一个元素进行 *** 作。
此接口是 Java Collections framework 的成员。

void	add​(E e) 将指定的元素插入列表(可选 *** 作)。
boolean hasNext() 如果此列表迭代器在向前遍历列表时具有更多元素,则返回 true 。
boolean hasPrevious() 如果此列表迭代器在反向遍历列表时具有更多元素,则返回 true 。
E next() 返回列表中的下一个元素并前进光标位置。
int nextIndex() 返回后续调用 next()将返回的元素的索引。
E previous() 返回列表中的上一个元素并向后移动光标位置。
int previousIndex() 返回后续调用 previous()将返回的元素的索引。
void	remove() 从列表中删除 next()或 previous() (可选 *** 作)返回的最后一个元素。
void	set​(E e) 用指定的元素替换 next()或 previous()返回的最后一个元素(可选 *** 作)。

声明方法的接口 java.util.Iterator
forEachRemaining
ListIterator 是一个功能更加强大的,它继承于 Iterator 接口,只能用于各种 List 类型的访问。可以通过调用 listIterator() 方法产生一个指向 List 开始处的 ListIterator,还可以调用 listIterator(n) 方法创建一个一开始就指向列表索引为 n 的元素处的 ListIterator。

ArrayList a = new ArrayList();

a.add("aaa");
a.add("bbb");
a.add("ccc");
System.out.println("Before iterate : " + a);

ListIterator it = a.listIterator();
while (it.hasNext()) {
    System.out.println(it.next() + ", " + it.previousIndex() + ", " + it.nextIndex());
}

while (it.hasPrevious()) {
    System.out.print(it.previous() + " ");
}
System.out.println();
it = a.listIterator(1);
while (it.hasNext()) {
    String t = it.next();
    System.out.println(t);
    if ("ccc".equals(t)) { it.set("nnn"); } 
    else { it.add("kkk"); }
}
System.out.println("After iterate : " + a);
// Before iterate : [aaa, bbb, ccc]
// aaa, 0, 1
// bbb, 1, 2
// ccc, 2, 3
// ccc bbb aaa
// bbb
// ccc
// After iterate : [aaa, bbb, kkk, nnn]

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5691849.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-17
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存