【Java基础】【类】
简介
集合上的迭代器。在Java集合框架中,迭代器取代了 Enumeration
。迭代器与 Enumeration
有两个不同之处:
- 迭代器允许调用者在迭代期间使用定义良好的语义从底层集合中删除元素。
- 方法名得到了改进。
该接口是Java集合框架的成员。
类
自从:
1.2
请参阅:
Collection, ListIterator, Iterable
作者:
Josh Bloch
类型参数:
– 迭代器返回的元素类型
public interface Iterator<E>;
方法:
如果迭代有更多的元素,则返回true。(换句话说,如果next将返回一个元素而不是抛出异常,则返回true。)
boolean hasNext();
返回迭代中的下一个元素。抛出: NoSuchElementException——如果迭代没有更多的元素
E next();
从基础集合中移除此迭代器返回的最后一个元素(可选操作)。
每次调用next时只能调用一次此方法。如果在迭代进行时,以调用此方法以外的任何方式修改了底层集合,则迭代器的行为将不指定。
抛出:
UnsupportedOperationException -如果这个迭代器不支持移除操作
IllegalStateException——如果还没有调用下一个方法,或者在最后一次调用下一个方法之后已经调用了remove方法
实现要求: 默认实现抛出UnsupportedOperationException的实例,不执行其他操作。
default void remove() {
throw new UnsupportedOperationException("remove");
}
对每个剩余的元素执行给定的操作,直到处理完所有元素或操作抛出异常。如果指定了迭代的顺序,则按迭代的顺序执行操作。操作抛出的异常被转发给调用者。 参数:
action—为每个元素执行的操作
抛出:
NullPointerException -如果指定的操作为空
实现要求: 默认实现的行为如下: 而(hasNext ()) action.accept (next ()); 自从: 1.8
default void forEachRemaining(Consumer<? super E> action) {
Objects.requireNonNull(action);
while (hasNext())
action.accept(next());
}
}
demo
@Test
public void testIterator(){
//创建一个大小为4的字符串list
List<String> strings = new ArrayList<>();
strings.add("Aa");
strings.add("Bb");
strings.add(null);
strings.add(null);
//1.基本迭代
System.out.println("迭代1:");
Iterator<String> iterator = strings.iterator();
while (iterator.hasNext()){
String next = iterator.next();
System.out.println("迭代器1获取到的元素"+next);
}
//2.使用remove方法删除指定元素
System.out.println("迭代2:");
Iterator<String> iterator2 = strings.iterator();
while (iterator2.hasNext()){
String next = iterator2.next();
System.out.println("迭代器2获取到的元素"+next);
if ("Aa".equals(next)){
iterator2.remove();
System.out.println("成功执行删除操作");
}
}
iterator2.forEachRemaining(System.out::println);
//2.使用forEachRemaining迭代
System.out.println("迭代3:");
Iterator<String> iterator3 = strings.iterator();
iterator3.forEachRemaining(x->System.out.println("迭代器3获取到的元素"+x));
}
迭代器就像一个指向元素的指针,从指向第一个元素依次往后移一位到指向第二个元素,以此类推。