Java集合類中的Iterator和ListIterator的區別

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

相關文章
相關標籤/搜索