Iterable
Iterable是一个接口,被Collection所继承。它只有一个方法: Iterator<T> iterator() //即返回一个迭代器。
迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为**“轻量级”**对象,因为创建它的代价小。
Java中的Iterator功能比较简单,并且只能单向移动。
使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。
Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。
Iterator在遍历过程中使用了锁定,只有他自己能动,所以使用remove方法可行性更高。
public static void main(String[] args) {
List<String> l = new ArrayList<String>();
l.add("aa");
l.add("bb");
l.add("cc");
Iterator iter = l.iterator();
while(iter.hasNext()){//判断是否有元素没有被遍历
System.out.println((String)iter.next());//返回游标当前位置元素,并将游标移动到下一个位置
iter.remove();//删除游标左边的元素(仅能执行一次)
}
}
Modifier and Type | Method and Description |
---|---|
default void | forEachRemaining(Consumer<? super E> action) 对每个剩余元素执行给定的操作,直到所有元素都被处理或动作引发异常。 |
boolean | hasNext() 如果迭代具有更多元素,则返回 |
E | next() 返回迭代中的下一个元素。 |
default void | remove() 从底层集合中删除此迭代器返回的最后一个元素(可选操作)。 |
ListIterator
它继承于Iterator接口,只能用于各种List类型的访问。可以通过调用listIterator()方法产生一个指向List开始处的ListIterator。
双向移动(向前/向后遍历).
产生相对于迭代器在列表中指向的当前位置的前一个和后一个元素的索引。
可以使用set()方法替换它访问过的最后一个元素。
可以使用add()方法在next()方法返回的元素之前或previous()方法返回的元素之后插入一个元素。
public static void main(String[] args) {
List<String> a = new ArrayList<String>();
a.add("aaa");
a.add("bbb");
a.add("ccc");
System.out.println("Before iterate : " + a);//[aaa, bbb, ccc]
ListIterator<String> it = a.listIterator();
while (it.hasNext()) {
System.out.println(it.next() + ", " + it.previousIndex() + ", " + it.nextIndex());//aaa, 0, 1 bbb, 1, 2 ccc, 2, 3
}
while (it.hasPrevious()) {
System.out.print(it.previous() + " ");//ccc bbb aaa
}
System.out.println();
it = a.listIterator(1);//调用listIterator(n)方法创建一个一开始就指向列表索引为n的元素处的ListIterator。
while (it.hasNext()) {
String t = it.next();
System.out.println(t);//第一次循环:bbb 第二次循环:ccc
if ("ccc".equals(t)) {
it.set("nnn");
} else {
it.add("kkk");
}
}
System.out.println("After iterate : " + a);//After iterate : [aaa, bbb, kkk, nnn]
}
Modifier and Type | Method and Description |
---|---|
void | add(E e) 将指定的元素插入列表(可选操作)。 |
boolean | hasNext() 返回 |
boolean | hasPrevious() 返回 |
E | next() 返回列表中的下一个元素,并且前进光标位置。 |
int | nextIndex() 返回随后调用 |
E | previous() 返回列表中的上一个元素,并向后移动光标位置。 |
int | previousIndex() 返回由后续调用 |
void | remove() 从列表中删除由 |
void | set(E e) 用 指定的元素替换由 |