每日一道面试题之Iterator 和 ListIterator 有什么区别?

IteratorListIterator 都是 Java 集合框架中用于遍历集合元素的接口,但它们有一些区别:

使用的范围Iterator可以迭代所有集合,而ListIterator 只能用于List及其子类

继承关系ListIterator 继承 Iterator,并且ListIterator包含的方法更多

遍历的方向Iterator 接口只能向前遍历集合元素,而 ListIterator 接口可以双向遍历,即向前或向后遍历集合元素。

遍历的能力Iterator 接口只能遍历集合,而 ListIterator 接口除了遍历集合元素外,还可以修改集合中的元素添加新的元素,以及获取当前遍历位置的索引。

遍历的起点Iterator 接口的遍历起点是集合的开头,而 ListIterator 接口可以通过 hasPrevious()previous() 方法从集合的末尾开始遍历。

遍历的性能Iterator 接口的遍历性能通常比 ListIterator 接口更好,因为 ListIterator 接口需要维护额外的指针和索引信息。

示例如下所示:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;

public class Test{
    public static void main(String[] args) {
        ArrayList<String> arrayList=new ArrayList<>();
        arrayList.add("张三");
        arrayList.add("李四");
        arrayList.add("王五");
        Iterator<String> iterator=arrayList.iterator();
        System.out.println("iterator遍历的结果为:");
        while(iterator.hasNext()){
            String element=iterator.next();
            System.out.print(element+" ");
            System.out.println();
        }
        ListIterator<String> listIterator=arrayList.listIterator();
        System.out.println("listIterator正向遍历的结果为:");
        while(listIterator.hasNext()){
            String element=listIterator.next();
            if(element.equals("王五")){//在遍历过程中,修改集合中的元素
                listIterator.set("Lisa");
            }
            System.out.println(element+" ");
        }
        ListIterator<String> listIterator2=arrayList.listIterator();
        System.out.println("listIterator修改后正向遍历的结果为:");
        while(listIterator2.hasNext()){
            String element=listIterator2.next();
            System.out.println(element+" ");
        }
        System.out.println("listIterator修改后反向遍历的结果为:");
        while(listIterator.hasPrevious()){
            String element=listIterator.previous();
            System.out.println(element+" ");
        }
    }
}

输出如下所示:

iterator遍历的结果为:
张三 
李四 
王五 
listIterator正向遍历的结果为:
张三 
李四 
王五 
listIterator修改后正向遍历的结果为:
张三 
李四 
Lisa 
listIterator修改后反向遍历的结果为:
Lisa 
李四 
张三

你可能感兴趣的:(Java面试题,java,算法,开发语言,后端,面试)