1.1 Iterator和ListIterator的区别是什么?| Java Debug 笔记

183 阅读2分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看 活动链接

Debug 笔记 <Iterator和ListIterator的区别是什么?>

相同点

IteratorListIterator都是迭代器,当需要对集合中元素进行遍历不需要干涉其遍历过程时,这两种迭代器都可以使用。

不同点

1.所属关系

ListIterator是一个Iterator的子类型。

2.ListIterator 比 Iterator多方法

Iterator迭代器包含以下三种方法:

  • boolean hasNext():如果仍有元素可以迭代,则返回true
  • E next():返回迭代的下一个元素。
  • void remove():从迭代器指向的 collection 中移除迭代器返回的最后一个元素,每次调用 next 只能调用一次此方法。

ListIterator迭代器包含以下九种方法:

  • void add(E e):将指定的元素插入列表。
  • boolean hasNext() :以正向遍历列表时,如果列表迭代器有多个元素,则返回 true
  • boolean hasPrevious() :如果以逆向遍历列表,列表迭代器有多个元素,则返回 true
  • E next():返回列表中的下一个元素。
  • int nextIndex() :返回对 next 的后续调用所返回元素的索引。
  • E previous():返回列表中的前一个元素。
  • int previousIndex() :返回对 previous 的后续调用所返回元素的索引。
  • void remove() :从列表中移除由 nextprevious 返回的最后一个元素。
  • void set(E e):用指定元素替换 nextprevious 返回的最后一个元素。

3.使用范围不同,

Iterator可以迭代所有集合;ListIterator 只能用于List及其子类。

遍历集合的案例

对于Iterator而言,因为本身是一个接口,所以要想实例化则必须依靠Collection接口完成。

Iterator<E> iterator()

import java.util.List ;
import java.util.ArrayList ;
import java.util.Iterator ;
public class demo1{
    public static void main(String args[]){
        List<String> all=  new ArrayList<String>() ;   //
        all.add("Hello") ;
        all.add("Jue") ;
        all.add("Jin") ;
        Iterator<String> iter = all.iterator() ;   // 为Iterator接口实例化
        while(iter.hasNext()){ // 判断是否有内容
            System.out.println(iter.next()) ;  // 输出内容
        }
    }
};

输出为:

image.png

Iterator接口的主要功能是由前向后单向输出,而此时如果想实现由后向前或者是由前向后的双向输出,则就必须使用Iterator的子接口ListIterator

import java.util.ArrayList ;
import java.util.List ;
import java.util.ListIterator ;
public class demo1{
    public static void main(String argsp[]){
        List<String> all = new ArrayList<String>() ;
        all.add("Hello") ;
        all.add("Jue") ;
        all.add("Jin") ;
        ListIterator<String> iter = all.listIterator() ;
        System.out.print("由前向后输出:") ;
        while(iter.hasNext()){
            String str = iter.next() ;
            System.out.print(str + " ") ;
        }
        System.out.print("\n由后向前输出:") ;
        while(iter.hasPrevious()){
            String str = iter.previous() ;
            System.out.print(str + " ") ;
        }
    }
};

输出为:

image.png