Java ListIterator示例

时间:2020-01-09 10:35:00  来源:igfitidea点击:

在Java中,有一个Iterator接口,它提供对集合(列表,集合等)的迭代器,但在Java中,还有另一个接口ListIterator,它专门为诸如ArrayList,LinkedList,CopyOnWriteArrayList的列表提供迭代器。

尽管迭代器只能向前移动,但Java中的ListIterator提供了沿任一方向遍历List的功能;前进或者后退,这是Java中Iterator和ListIterator之间的区别之一。其他差异如下。

  • 这两个接口都具有remove()方法,可在创建迭代器后安全地从List中删除元素,但ListIterator也具有add()方法。
  • ListIterator还具有set()方法来在迭代List时更改元素。

ListIterator中没有当前元素

ListIterator没有当前元素。它的光标位置始终位于通过调用previous()返回的元素和通过调用next()返回的元素之间。下图显示了长度为n的列表的可能光标位置。

Java ListIterator方法

Java中的ListIterator接口提供以下方法:

  • add(E e)–将指定的元素插入列表。
  • hasNext()–在向前遍历列表时,如果此列表迭代器包含更多元素,则返回true。
  • hasPrevious()-如果在反向遍历列表时此列表迭代器包含更多元素,则返回true。
  • next()–返回列表中的下一个元素并前进光标位置。
  • nextIndex()–返回元素的索引,该元素的索引将由对next()的后续调用返回。
  • previous()–返回列表中的上一个元素,并将光标位置向后移动。
  • previousIndex()–返回元素的索引,该元素的索引由后续对previous()的调用返回。
  • remove()–从列表中删除next()或者previous()返回的最后一个元素。
  • set(E e)–将next()或者previous()返回的最后一个元素替换为指定的元素。

具有双向遍历的Java ListIterator示例

import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;

public class ListIterationDemo {
  public static void main(String[] args) {
    List<String> carList = new LinkedList<String>();
    carList.add("Audi");
    carList.add("Jaguar");
    carList.add("BMW");
    carList.add("Mini Cooper");
    //Getting ListIterator
    ListIterator<String> ltr = carList.listIterator();
    //forward iteration
    System.out.println("List iteration - forward direction");
    while(ltr.hasNext()){
        System.out.println(ltr.next());
    }
    // backward iteration 
    System.out.println("List iteration - backward direction");
    while(ltr.hasPrevious()){
        System.out.println(ltr.previous());
    }
  }
}

输出:

List iteration - forward direction
Audi
Jaguar
BMW
Mini Cooper
List iteration - backward direction
Mini Cooper
BMW
Jaguar
Audi

使用ListIterator的add()和set()方法的示例

import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;

public class ListIterationDemo { 
  public static void main(String[] args) {
    List<String> carList = new LinkedList<String>();
    carList.add("Audi");
    carList.add("Jaguar");
    carList.add("BMW");
    carList.add("Mini Cooper");
    //Getting ListIterator
    ListIterator<String> ltr = carList.listIterator(); 
    while(ltr.hasNext()){
      String car = ltr.next();
      
      if(car.equals("BMW")) {
          ltr.add("Mercedes");
      }
      if(car.equals("Mini Cooper")) {
          ltr.set("Camry");
      }
    }
    System.out.println("List elements- " + carList);
  }
}

输出

List elements- [Audi, Jaguar, BMW, Mercedes, Camry]