Java集合框架学习(2)——Iterator


Iterator

default修饰符是Java8中新的概念,在Java8发布时,需要Java在现有实现架构的下能往接口里增加新方法。引入Default方法,可以在优化接口的同时,避免跟现有实现架构的兼容问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package java.util;

import java.util.function.Consumer;

public interface Iterator<E> {

// 是否有下一元素
boolean hasNext();

// 返回下一元素
E next();

// Default方法是指,在接口内部包含了一些默认的方法实现
// 也就是接口中可以包含方法体,这打破了Java之前版本对接口的语法限制
// 从而使得接口在进行扩展的时候,不会破坏与接口相关的实现类代码。
default void remove() {
throw new UnsupportedOperationException("remove");
}

default void forEachRemaining(Consumer<? super E> action) {
Objects.requireNonNull(action);
while (hasNext())
action.accept(next());
}
}

ListIterator

ListIterator继承自Iterator,除了父接口原有的方法hasNext()next()外,还申明了新的查询操作hasPrevious()previous()nextIndex()previousIndex(),以及修改操作remove()set()add()。相关操作见下图
"ListIterator"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package java.util;
public interface ListIterator<E> extends Iterator<E> {
// Query Operations

// 继承自父类
boolean hasNext();

// 继承自父类
E next();

// 是否有前一元素
boolean hasPrevious();

// 返回前一元素
E previous();

// 返回当前iterator的下标
int nextIndex();

// 返回当前iterator的前一下标,如果当前下标为0,前一下标为-1
int previousIndex();

// Modification Operations

// 删除元素
// remove当前元素必须先next(),否则remove的是前一元素
// 若iterator下标为0,直接remove抛出IllegalStateException异常
void remove();

// 替换元素
// 同remove,set当前元素前必须先next,否则set的是前一元素
// 若iterator下标为0,直接set抛出IllegalStateException异常
void set(E e);

// 插入元素,在该iterator的位置add
void add(E e);
}