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

相关文章
相关标签/搜索