当我们要显示List收集的所有对象,也许你会这么写:
List<Integer> list=new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
这个方法适合所有操作List接口的对象,如ArrayList、LinkedList等。如果要让你写个方法显示Set收集所有对象呢,你改怎样写?可能你会这样写:
Set<Integer> list=new HashSet()<>();
list.add(1);
list.add(2);
list.add(3);
for (Integer integer : list) {
System.out.println(integer);
}
这个方法适用于所有操作Set接口的对象,如HashSet、TreeSet等。但是现在让你写一个可以显示Queue收集的所有对象,你该怎样写?还能用上面的两种方法写吗?显然这是不符合的。事实上,无论是List、Set还是Queue,这些接口都继承了Collection接口,而这个接口的父接口为Iterable,所以都拥有了iterator的行为。
那么,如何使用迭代器呢?通常情况下,你会希望遍历一个集合中的元素。例如,显示集合中的每个元素。做到这一点最简单的方法是采用一个迭代器,它是一个对象,实现了Iterator 接口或ListIterator接口。迭代器,使你能够通过循环来得到或删除集合的元素。ListIterator继承了Iterator,以允许双向遍历列表和修改元素。
Iterator()方法会返回Iterable接口的操作对象,这个对象包括Collection收集的所有对象,你可以使用Iterator的hasNext()方法看看有无下一个对象,若有的话,在使用next()取得下一个对象。因此,无论List、Set、Queue还是任何Collection,都可以使用以下的方法来显示收集的对象:
Set<Integer> list=new HashSet<>();
list.add(1);
list.add(2);
list.add(3);
Iterator<Integer>iterator=list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}