手机上的网站是怎么做的吗,广告联盟,做网站 用 显示器,网站建设属于服务还是货物Iterator public interface IteratorE {} terator是一个接口#xff0c;它是集合的迭代器。集合可以通过Iterator去遍历集合中的元素。Iterator提供的API接口如下#xff1a;
forEachRemaining(Consumer? super E action)#xff1a;为每个剩余元素执行给…Iterator public interface IteratorE {} terator是一个接口它是集合的迭代器。集合可以通过Iterator去遍历集合中的元素。Iterator提供的API接口如下
forEachRemaining(Consumer? super E action)为每个剩余元素执行给定的操作,直到所有的元素都已经被处理或行动将抛出一个异常
hasNext()如果迭代器中还有元素则返回true。
next()返回迭代器中的下一个元素
remove()删除迭代器新返回的元素。
例子
import java.util.*;
public class TestIterator {public static void main(String[] args) {ArrayListString a new ArrayListString();a.add(aaa);a.add(bbb);a.add(ccc);System.out.println(Before iterate : a);IteratorString it a.iterator();while (it.hasNext()) {String t it.next();if (bbb.equals(t)) {it.remove();}}System.out.println(After iterate : a);}
}
注意
1Iterator只能单向移动。
2Iterator.remove()是唯一安全的方式来在迭代过程中修改集合如果在迭代过程中以任何其它的方式修改了基本集合将会产生未知的行为。而且每调用一次next()方法remove()方法只能被调用一次如果违反这个规则将抛出一个异常。
ListIterator Interface ListIteratorE{} 包含的方法有
(1)双向移动向前/向后遍历.
(2)产生相对于迭代器在列表中指向的当前位置的前一个和后一个元素的索引.
(3)可以使用set()方法替换它访问过的最后一个元素.
Iterator和ListIterator区别 我们在使用ListSet的时候为了实现对其数据的遍历我们经常使用到了Iterator(迭代器)。使用迭代器你不需要干涉其遍历的过程只需要每次取出一个你想要的数据进行处理就可以了。但是在使用的时候也是有不同的。List和Set都有iterator()来取得其迭代器。对List来说你也可以通过listIterator()取得其迭代器两种迭代器在有些时候是不能通用的Iterator和ListIterator主要区别在以下方面 1ListIterator有add()方法可以向List中添加对象而Iterator不能 2ListIterator和Iterator都有hasNext()和next()方法可以实现顺序向后遍历但是ListIterator有hasPrevious()和previous()方法可以实现逆向顺序向前遍历。Iterator就不可以。 3ListIterator可以定位当前的索引位置nextIndex()和previousIndex()可以实现。Iterator没有此功能。 4都可实现删除对象但是ListIterator可以实现对象的修改set()方法可以实现。Iierator仅能遍历不能修改。 因为ListIterator的这些功能可以实现对LinkedList等List数据结构的操作。其实数组对象也可以用迭代器来实现。 Iterable or each原理
其实for each循环内部也是依赖于Iterator迭代器只不过Java提供的语法糖Java编译器会将其转化为Iterator迭代器方式遍历。我们对以下for each循环进行反编译 for (Integer i : list) {System.out.println(i);}
反编译后
Integer i;
for(Iterator iterator list.iterator(); iterator.hasNext(); System.out.println(i)){i (Integer)iterator.next(); }
有一个问题为什么不直接将hasNext()next()方法放在Iterable接口中其他类直接实现就可以了
原因是有些集合类可能不止一种遍历方式实现了Iterable的类可以再实现多个Iterator内部类例如LinkedList中的ListItr和DescendingIterator两个内部类就分别实现了双向遍历和逆序遍历。通过返回不同的Iterator实现不同的遍历方式这样更加灵活。如果把两个接口合并就没法返回不同的Iterator实现类了。