最近看到集合类,知道凡是实现了Collection接口的集合类,都有一个Iterator方法,用于返回一个实现了Iterator接口的对象,用于遍历集合;(Iterator接口定义了3个方法分别是hasNext(),next(),remove();) java
咱们在使用List,Set的时候,为了实现对其数据的遍历,咱们常常使用到了Iterator(迭代器)。使用迭代器,你不须要干涉其遍历的过程,只须要每次取出一个你想要的数据进行处理就能够了。数组
可是在使用的时候也是有不一样的。List和Set都有iterator()来取得其迭代器。对List来讲,你也能够经过listIterator()取得其迭代器,两种迭代器在有些时候是不能通用的,Iterator和ListIterator主要区别在如下方面:数据结构
1. iterator()方法在set和list接口中都有定义,可是ListIterator()仅存在于list接口中(或实现类中);this
2. ListIterator有add()方法,能够向List中添加对象,而Iterator不能spa
3. ListIterator和Iterator都有hasNext()和next()方法,能够实现顺序向后遍历,可是ListIterator有hasPrevious()和previous()方法,能够实现逆向(顺序向前)遍历。Iterator就不能够。code
4. ListIterator能够定位当前的索引位置,nextIndex()和previousIndex()能够实现。Iterator没有此功能。对象
5. 均可实现删除对象,可是ListIterator能够实现对象的修改,set()方法能够实现。Iierator仅能遍历,不能修改。 排序
由于ListIterator的这些功能,能够实现对LinkedList等List数据结构的操做。其实,数组对象也能够用迭代器来实现。索引
java示例:接口
代码以下: package com.lovo.peopleReverse; //建立一个对象,提供get,set方法 import java.util.ArrayList; import java.util.List; import java.util.ListIterator; public class People { String name; int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public People(String name, int age){ this.name = name; this.age = age; } //将对象实例化,并给它赋值。且用一个list集合装起来 public static void main(String[] args) { People p1 = new People("杨华",26); People p2 = new People("李逵",36); People p3 = new People("林冲",40); List list = new ArrayList(); list.add(p1);list.add(p2);list.add(p3); //将ArrayList泛型改为ListIterrator,以使用hasNext(),next()方法正向迭代。 ListIterator l = list.listIterator(); //正向迭代,并从新将迭代出的对象设置到list中,再下面调用hasPrevious(),previous()方法,逆向迭 代 //注意:在使用此操做时候 必定要注意:必定要先进行由前向后输出,以后才能进行由后向前输出 while(l.hasNext()){ People p = l.next(); //从新设值.set(); .add(); System.out.print(p.getAge()); } //判断若前一个元素存在,则取出来。从而 while(l.hasPrevious()){ People p = l.previous(); System.out.print(p.getAge()); } } }
打印结果为正向排序及逆向排序打印:263640403626