- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Java中Iterator与ListIterator迭代的区别由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
迭代的时候可以修改数据吗?
答,Iterator迭代的时候可以移除数据,但是不能添加;而ListIterator迭代时可以添加数据,移除数据,倒序遍历,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public
class
Bianli {
public
static
void
main(String[] args) {
ArrayList<String> list=
new
ArrayList<>();
list.add(
"aaa"
);
list.add(
"sss"
);
list.add(
"ddd"
);
list.add(
"fff"
);
list.add(
"ggg"
);
Iterator<String> iterator = list.iterator();
while
(iterator.hasNext()){
if
(iterator.next().equals(
"ddd"
)){
list.add(
"eee"
);
//不可以添加,
iterator.remove();
//但是可以移除
}
}
for
(String s:list
) {
System.out.println(s);
}
}
|
这个迭代器只有remove方法,无add方法,要想添加数据得靠list对象,但是这时候如果通过list添加数据,就相当于有两个人同时操作一个数据,会产生Exception in thread “main” java.util.ConcurrentModificationException 。
而ListIterator迭代器提供了add方法,可以通过迭代器进行添加数据,而不用通过集合对象添加,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
package
today;
import
java.util.*;
/**
* @author : Gavin
* @date: 2021/7/17 - 07 - 17 - 21:23
* @Description: today
* @version: 1.0
*/
public
class
Bianli {
public
static
void
main(String[] args) {
ArrayList<String> list=
new
ArrayList<>();
list.add(
"aaa"
);
list.add(
"sss"
);
list.add(
"ddd"
);
list.add(
"fff"
);
list.add(
"ggg"
);
Iterator<String> iterator = list.iterator();
while
(iterator.hasNext()){
if
(iterator.next().equals(
"ddd"
)){
//list.add("eee");//不可以添加,
iterator.remove();
//但是可以移除
}
}
for
(String s:list
) {
System.out.println(s);
}
List <String>list1 =
new
ArrayList<>();
list1.add(
"111"
);
list1.add(
"222"
);
list1.add(
"444"
);
list1.add(
"666"
);
list1.add(
"888"
);
ListIterator<String> iterator1 = list1.listIterator();
while
(iterator1.hasNext()){
if
(
"444"
.equals(iterator1.next())){
iterator1.remove();
iterator1.add(
"333"
);
}
}
for
(String str : list1) {
System.out.println(str);
}
}
}
|
我们还可以倒叙迭代,通过listiterator的hasPrevious()方法–因为当我们正序迭代完之后,光标指针已经到了尾部了,
1
2
3
4
5
6
|
System.out.println(iterator1.hasNext());
System.out.println(iterator1.hasPrevious());
while
(iterator1.hasPrevious()){
System.out.println(iterator1.previous());
}
}
|
a、listIterator继承自Iterator,继承结构如下所示.
1
|
public
interface
ListIterator<E>
extends
Iterator<E>
|
b、Iterator迭代器仅有三个方法,分别是hasNext()、next()和remove(),能够实现顺序遍历和元素的删除;我们来看一下使用迭代器删除list集合的元素:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
System.out.println(
"\nIterator的remove方法:"
);
Iterator<String> iterator3 = list.iterator();
while
(iterator3.hasNext()){
String value = iterator3.next();
//删除5这个元素
if
(
"5"
.equals(value)){
iterator3.remove();
}
}
for
(String s:list){
System.out.print(s+
" "
);
}
|
而ListIterator迭代器除了实现上面Iterator的功能外,还可以通过add()方法添加元素:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
System.out.println(
"\nListIterator的remove方法:"
);
ListIterator<String> iterator4 = list.listIterator();
while
(iterator4.hasNext()){
String value = iterator4.next();
if
(
"2"
.equals(value)){
iterator4.remove();
}
}
//添加元素
iterator4.add(
"5"
);
iterator4.add(
"6"
);
for
(String s:list){
System.out.print(s+
" "
);
}
|
c、ListIterator支持逆序遍历,可以使用hasPrevious()和previous()来实现list的逆序遍历:
1
2
3
4
5
|
System.out.println(
"\nListIterator的逆序遍历:"
);
while
(iterator4.hasPrevious()){
String value = iterator4.previous();
System.out.print(value+
" "
);
}
|
d、ListIterator支持元素的修改,可以通过set方法对list现有的元素进行修改,注意,修改的是list的元素,当前的迭代器的元素的更改可能不会生效:
1
2
3
4
5
6
7
8
9
10
|
System.out.println(
"\nListIterator元素的设置:"
);
while
(iterator4.hasNext()){
String value = iterator4.next();
iterator4.set(value+
"-"
);
System.out.print(value+
" "
);
}
System.out.println();
for
(String s:list){
System.out.print(s+
" "
);
}
|
到此这篇关于Java中Iterator与ListIterator迭代的区别的文章就介绍到这了,更多相关Java Iterator与ListIterator迭代内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://blog.csdn.net/weixin_54061333/article/details/118863169 。
最后此篇关于Java中Iterator与ListIterator迭代的区别的文章就讲到这里了,如果你想了解更多关于Java中Iterator与ListIterator迭代的区别的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
有人可以告诉我,如果 (ListIterator it = listIterator(); it.hasNext(); )部分代码应写为 for (ListIterator it = list.lis
我在替换数组列表中的项目时遇到问题。我搜索了 soultion,发现它是由 listIterator 完成的。所以我想实现它,但不知何故迭代器的“set”方法不可用。为什么?整个事情都发生在我的 sp
我有两个 ArrayList,每个都包含一定大小的块:blockList、eraseList。块是具有两个字段的对象:开始和结束。我需要从另一组块中减去一组块。 我必须遍历删除器列表并从它们重叠的块列
我有一个自定义的、通用的、单独的 LinkedList,它是我自己构建的。我可以在列表中添加、删除等。我想在我的类中实现 Java ListIterator。我将如何开始这个?我需要将哪些方法添加到我
我正在努力实现一种检查 ArrayList 中连续相等元素的最大数量的方法: public class ArrayReader { public int getMaxConsecutiveEq
我有一个简单的 Java LinkedList,它有 10 个元素。在这种状态下,我得到一个普通的 ListIterator,比如 .listIterator(3)。如果我随后将其他元素插入/删除到列
我正在读一篇thread这里介绍一下java ArrayList和LinkedList的性能。有来自Mr Kevin Brock的答复内容如下。 "Linked list add is not alw
我有一个引用类型的数组。我想使用 hasPrevious() 和 hasNext() 方法。我想使用ListIterator。将数组转换为 ListIterator 的正确方法吗? 最佳答案 我发现执
我有一个简短的问题,关于 ListIterators(我想,通常是 Iterators)在 Java 中的表现。例如,对于一个链表(Java 的标准链表),如果我为其获取一个 ListIterator
我需要在ListIterator“nodeListIterator”中交换node和node.getNext(),并且我已经尝试了几个小时 if (node instanceof LdcInsnNo
所以我的问题是,是否可以通过使用带有列表名称(foodList、foodAmount 等)的数组来简化这段代码,而不是用列表名称(来自所述数组)进行某种循环来替换迭代器中的占位符? 这是代码: pub
package wrap; import java.util.*; public class ArrayListDemo { public static void main(String []
我目前正在尝试学习如何实现我自己的 ListIterators。除了我对 previous() 方法感到困惑外,我已经实现了其中的大部分并准备就绪。按照标准惯例,我可以解释一下 previous()
我有如下所示的代码片段: ArrayList a = new ArrayList(); ListIterator p = a.listIterator(); 但是,我注意到您实际上不需要为 Li
代码: Random Picker = new Random(); List list = new ArrayList(); list.add("card1"); list.add("ca
关于Java中迭代的问题。我(在某种程度上)熟悉 Iterator、ListIterator 和 Iterable 接口(interface),即我了解它们背后的想法。但这也是我的问题所在。 如果
我有两个类:ParentClass 和 SubClass。子类继承自父类。我有以下代码:(在类内) List lstSub; //some initialization public ListIter
我编写了以下使用列表迭代器函数的代码,为什么没有打印出结果,谁能告诉我出了什么问题?谢谢。 import java.util.ArrayList; import java.util.ListItera
如何从 ListIterator 中删除所有元素,然后添加新元素。我在最后一行添加到迭代器时遇到 ConcurrentModificationException 。 public static voi
我正在使用 Java 进行编程,我创建了一个类来获取一个迭代器,因为我在此代码中仅使用一个列表 public ListIterator iterateur() { ListIterator i
我是一名优秀的程序员,十分优秀!