最近看到集合類,知道凡是實現了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