gpt4 book ai didi

Java中Iterator与ListIterator迭代的区别

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 32 4
gpt4 key购买 nike

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);
         }
         }

Java中Iterator与ListIterator迭代的区别

这个迭代器只有remove方法,无add方法,要想添加数据得靠list对象,但是这时候如果通过list添加数据,就相当于有两个人同时操作一个数据,会产生Exception in thread “main” java.util.ConcurrentModificationException 。

Java中Iterator与ListIterator迭代的区别

而ListIterator迭代器提供了add方法,可以通过迭代器进行添加数据,而不用通过集合对象添加,

Java中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
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);
         }
     }
}

Java中Iterator与ListIterator迭代的区别

我们还可以倒叙迭代,通过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());
         }
     }

补充:ListIterator和Iterator迭代器区别

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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com