天天看点

java listiterator_Java ListIterator接口

与迭代器(Iterator)一样,ListIterator是一个Java迭代器(Iterator),用于从List实现的对象中逐个迭代元素。

它从Java 1.2开始提供。

它扩展了Iterator接口。

它仅对List实现的类有用。

与Iterator不同,它支持所有四种操作:CRUD(CREATE,READ,UPDATE和DELETE)。

与Iterator不同,它支持正向和反向迭代。

它是一个双向迭代器。

它没有当前元素; 它的光标位置总是位于调用previous()返回的元素和调用next()返回的元素之间。

注意: - Collection API中的CRUD操作是什么?

CREATE:向Collection对象添加新元素。

READ:从Collection对象中检索元素。

UPDATE:更新或设置Collection对象中的现有元素。

DELETE:从Collection对象中删除元素。

1. Java ListIterator类图

在Java中,ListIterator是Collection API中的一个接口。它扩展了Iterator接口。为了支持前向和后向迭代和CRUD操作,它具有以下方法。可以将这个Iterator用于所有List实现的类,如:ArrayList,CopyOnWriteArrayList,LinkedList,Stack,Vector等。

java listiterator_Java ListIterator接口

在接下来的部分中使用一些有用的方法,并深入学习如何使用这些方法。

2. Java ListIterator方法

Java ListIterator接口具有以下方法。

编号

方法

描述

1

void add(E e)

将指定的元素插入列表中。

2

boolean hasNext()

如果此列表迭代器在向前遍历列表时具有元素,则返回true。

3

boolean hasPrevious()

如果此列表迭代器在反向遍历列表时具有元素,则返回true。

4

E next()

返回列表中的下一个元素。

5

int nextIndex()

返回元素的索引。

6

E previous()

返回列表中的上一个元素并向后移动光标位置。

7

int previousIndex()

返回元素的索引。

8

void remove()

从列表中删除由next()或previous()返回的最后一个元素。

9

void set(E e)

用指定的元素替换由next()或previous()返回的最后一个元素。

3. Java ListIterator基本示例

在本节中,将通过一些示例学习一些ListIterator方法。首先,需要了解如何获取此迭代器对象。

如何获得ListIterator?

ListIterator listIterator()

它返回此列表中元素的列表迭代器。

示例:

import java.util.*;

public class ListIteratorDemo

{

public static void main(String[] args)

{

List names = new LinkedList<>();

names.add("Java");

names.add("Python");

names.add("Ruby");

// Getting ListIterator

ListIterator namesIterator = names.listIterator();

// 遍历元素

while(namesIterator.hasNext()){

System.out.println(namesIterator.next());

}

// 增强的for循环在此创建内部迭代器。

for(String name: names){

System.out.println(name);

}

}

}

ListIterator双向迭代示例

在本节中,将学习ListIterator如何执行正向和反向迭代。

import java.util.*;

public class BiDirectinalListIteratorDemo

{

public static void main(String[] args)

{

List names = new LinkedListt<>();

names.add("Java");

names.add("Python");

names.add("Ruby");

// Getting ListIterator

ListIterator listIterator = names.listIterator();

// 遍历元素

System.out.println("Forward Direction Iteration:");

while(listIterator.hasNext()){

System.out.println(listIterator.next());

}

// 遍历元素

System.out.println("Backward Direction Iteration:");

while(listIterator.hasPrevious()){

System.out.println(listIterator.previous());

}

}

}

执行上面示例代码,得到以下结果 -

Forward Direction Iteration:

Java

Python

Ruby

Backward Direction Iteration:

Ruby

Python

Java

4. Java迭代器的类型

Java有四个游标:Enumeration,Iterator,ListIterator和Spliterator。可以将它们分为两种主要类型,如下所示:

单向迭代器

它们仅支持向前迭代。例如,Enumeration,Iterator等是单向迭代器。

双向迭代器

它们是支持前向和后向迭代的游标。例如,ListIterator是双向迭代器。

5. Java ListIterator如何在内部工作?

众所周知,Java ListIterator可以在两个方向上工作,它可以在向前方向和向后方向上工作。它是一个双向迭代器。为了支持此功能,它有两组方法 -

正向迭代方法

需要使用以下方法来支持正向迭代:hasNext(),next(),nextIndex()

向后方向迭代方法

需要使用以下方法来支持向后方向迭代:hasPrevious(),previous(),previousIndex()

在本节中,我们将讨论ListIterator如何在向后方向中工作。使用以下LinkedList对象来理解此功能。

List names = new LinkedList<>();

names.add("E-1");

names.add("E-2");

names.add("E-3");

.

.

.

names.add("E-n");

现在在LinkedList上创建一个ListIterator对象,如下所示:

ListIterator namesIterator = names.listLterator();

假设 ListIterator namesIterator在开始时,如下所示:

java listiterator_Java ListIterator接口

这里ListIterator的游标指向List的前一个元素。运行以下代码片段。

namesIterator.hasPrevious();

namesIterator.previous();

当运行上面的代码片段时,ListIterator的游标指向LinkedList中的最后一个元素,如上图所示。

java listiterator_Java ListIterator接口

然后运行以下代码段 -

namesIterator.hasPrevious();

namesIterator.previous();

当运行上面的代码片段时,ListIterator的游标指向List中的倒数第二个元素,如下图所示。

java listiterator_Java ListIterator接口

执行此过程将一直将ListIterator的游标传递到LinkedList的第一个元素。

java listiterator_Java ListIterator接口

在读取第一个元素后,如果运行下面的代码片段,它将返回false值。

namesIterator.hasPrevious();

当ListIterator的游标指向LinkedList的第一个元素之前,hasPrevious()方法返回false值。

在观察了所有这些图之后,可以说ListIterator支持正向和向后方向迭代,如下图所示。所以它也被称为双向光标。

ListIterator的优点

与Iterator不同,ListIterator具有以下优点:

与Iterator一样,它支持READ和DELETE操作。

它也支持CREATE和UPDATE操作。

它支持CRUD操作:CREATE,READ,UPDATE和DELETE操作。

它支持正向和反向迭代,因此它是一个双向Java游标。

方法名称简单易用。

ListIterator的局限性

与Iterator相比,Java ListIterator有许多优点。但是,它仍然存在以下一些限制。

它是Iterator唯一的List实现类。

与Iterator不同,它不适用于整个Collection API。

它不是通用Java游标。

与Spliterator相比,它不支持元素的并行迭代。

与Spliterator相比,它不支持更好的性能来迭代大量数据。

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。