正如我们所知道的,Java有四个方程式:Enumeration,Iterator,ListIterator和Spliterator. 在我之前的帖子中,我们已经讨论了Enumeration和Iterator方程式。
Java 列表
与Iterator一样,ListIterator是一个JavaIterator,它用于从实现的List对象中一次性迭代元素。
- 自 Java 1.2.
- 它扩展了 Iterator 界面
- 它只适用于列表实现的类
- 与 Iterator 不同,它支持所有四种操作: CRUD (CREATE, READ, UPDATE 和 DELETE)。
- 与 Iterator 不同,它支持前向和后向方向迭代
- 它是一个双向迭代器
- 它没有当前元素;其路由器位置总是位于将被调用返回以前()的元素之间,而该元素将被调用返回接下来的元素)。
注:收集 API 中的 CRUD 操作是什么?
- CREATE: 将新元素添加到 Collection 对象
- READ: 从 Collection 对象中获取元素
- UPDATE: 在 Collection 对象中更新或设置现有元素
- DELETE: 从 Collection 对象中删除元素
Java 列表Iterator 类图表
In Java, ListIterator is an interface in Collection API. It extends Iterator interface. To support Forward and Backward Direction iteration and CRUD operations, it has the following methods. We can use this Iterator for all List implemented classes like ArrayList, CopyOnWriteArrayList, LinkedList, Stack, Vector, etc. We will explore these methods in-depth with some useful methods in the coming sections.
Java ListIterator 方法
Java ListIterator 接口有以下方法。
- void add(E e): 将指定的元素插入列表中.
- boolean hasNext(): 如果列表迭代器在前进方向穿越列表时有更多元素时返回 true : 如果该列表迭代器在前进方向穿越列表时有更多元素时返回 true : 返回列表中的前一个元素,并向前移动路由器位置
- int nextIndex(): 返回将由后续调用返回的元素的索引( E():返回列表中的前一个元素,并将路由前一个元素返回( _*):返回该元素的索引
我们将在接下来的部分中一个接一个地探索这些方法,并提供有用的例子。
Java 列表 基本示例
在本节中,我们将讨论一些ListIterator方法,并提供一些示例。 首先,我们需要了解如何获取这个迭代器对象。
1ListIterator<E> listIterator()
返回此列表中的元素的列表迭代器。 ** 示例:-**
1import java.util.*;
2
3public class ListIteratorDemo
4{
5 public static void main(String[] args)
6 {
7 List<String> names = new LinkedList<>();
8 names.add("Rams");
9 names.add("Posa");
10 names.add("Chinni");
11
12 // Getting ListIterator
13 ListIterator<String> namesIterator = names.listIterator();
14
15 // Traversing elements
16 while(namesIterator.hasNext()){
17 System.out.println(namesIterator.next());
18 }
19
20 // Enhanced for loop creates Internal Iterator here.
21 for(String name: names){
22 System.out.println(name);
23 }
24 }
25}
Output:-
1Rams
2Posa
3Chinni
双向迭代示例
在本节中,我们将探讨ListIterator的方法如何执行前向和后向迭代。
1import java.util.*;
2
3public class BiDirectinalListIteratorDemo
4{
5 public static void main(String[] args)
6 {
7 List<String> names = new LinkedListt<>();
8 names.add("Rams");
9 names.add("Posa");
10 names.add("Chinni");
11
12 // Getting ListIterator
13 ListIterator<String> listIterator = names.listIterator();
14
15 // Traversing elements
16 System.out.println("Forward Direction Iteration:");
17 while(listIterator.hasNext()){
18 System.out.println(listIterator.next());
19 }
20
21 // Traversing elements, the iterator is at the end at this point
22 System.out.println("Backward Direction Iteration:");
23 while(listIterator.hasPrevious()){
24 System.out.println(listIterator.previous());
25 }
26 }
27}
Output:-
1Forward Direction Iteration:
2Rams
3Posa
4Chinni
5Backward Direction Iteration:
6Chinni
7Posa
8Rams
Java Iterator 类型
正如我们所知道的,Java有四个方程式:Enumeration,Iterator,ListIterator和Spliterator,我们可以将它们分为两种主要类型,如下所示:
单向迭代器
它们是仅支持前向迭代的方程式,例如,编号,迭代器等是单向迭代器.- 双向迭代器 它们是支持前向迭代和后向迭代的方程式,例如,ListIterator是双向迭代器。
Java ListIterator 如何在内部工作?
正如我们所知道的,Java ListIterator在两个方向工作,这意味着它在向前方向和向后方向工作. 它是一个双向迭代器. 为了支持这种功能,它有两套方法。
向前方向迭代方法
我们需要使用以下方法来支持前向迭代:
1 次 次 次 次 次 次 次 次 次 次 次 次 次
反向方向迭代方法
我们需要使用以下方法来支持后向迭代:
上一篇() 下一篇() 下一篇() 下一篇()
在我之前的帖子中,我们已经讨论了Iterator如何在Java Iterator 如何在内部工作?
部分内向转发中内部工作,即使 ListIterator也以同样的方式工作,如果你想通过我之前的帖子,请点击这里: Java Iterator。
1List<String> names = new LinkedList<>();
2names.add("E-1");
3names.add("E-2");
4names.add("E-3");
5.
6.
7.
8names.add("E-n");
现在在LinkedList上创建一个ListIterator对象,如下所示:
1ListIterator<String> namesIterator = names.listLterator();
Let us assume "namesIterator" ListIterator looks like below: Here ListIterator's Cursor is pointing to the before the first element of the List. Now we run the following code snippet in the while loop.
1namesIterator.hasNext();
2namesIterator.next();
When we run the above code snippet in the while loop, ListIterator's Cursor points to the last element in the LinkedList. Then we can run the following code snippet to start traversing from the end to the start.
1namesIterator.hasPrevious();
2namesIterator.previous();
When we run the above code snippet, ListIterator's Cursor points to the "Last but one" element in the List as shown in the above diagram. Do this process to reach the ListIterator's Cursor to the first element of the LinkedList.
After reading the first element, if we run the below code snippet, it returns "false" value.
1namesIterator.hasPrevious();
As ListIterator's Cursor points to the before the first element of the LinkedList, hasPrevious() method returns a false value. After observing all these diagrams, we can say that Java ListIterator supports Both Forward Direction and Backward Direction Iterations as shown in the below diagrams. So it is also known as Bi-Directional Cursor. Forward Direction ListIterator
Backward Direction ListIterator
ListIterator 的优点
与Iterator不同,ListIterator具有以下优点:
- 与 Iterator 一样,它支持 READ 和 DELETE 操作
- 它也支持 CREATE 和 UPDATE 操作
- 也就是说,它支持 CRUD 操作: CREATE, READ, UPDATE 和 DELETE 操作
- 它支持向前方向和向后方向迭代。
ListIterator 的限制
与Iterator相比,Java ListIterator有许多优势,但它仍然有以下一些局限性。
它不适用于整个 Collection API
- 它不是一个通用Java路由器
- 与Spliterator相比,它不支持元素的并行迭代
- 与Spliterator相比,它不支持更好的性能来迭代大量数据
Iterator 和 ListIterator 的相似之处
在本节中,我们将讨论Java两个课程者之间的相似之处:Iterator和ListIterator。
- Bother 在 Java 1.2 中引入
- 两者都是用于迭代收集或列表元素的迭代器
- 两者都支持 READ 和 DELETE 操作
- 两者都支持前向迭代
- 两者都不是传统接口
Iterator 和 ListIterator 的区别
在本节中,我们将讨论 Java 两个迭代器之间的差异:Iterator 和 ListIterator。
......................................................................................................................................................................................................
我希望这些Java ListIterator理论和示例可以帮助你开始使用ListIterator编程。