Java中Iterator与ListIterator迭代的区别

网友投稿 252 2022-12-26

Java中Iterator与ListIterator迭代的区别

迭代的时候可以修改数据吗?

答,Iterator迭代的时候可以移除数据,但是不能添加;而ListIterator迭代时可以添加数据,移除数据,倒序遍历;

public class Bianli {

public static void main(String[] args) {

ArrayList list= new ArrayList<>();

list.add("aaa");

list.add("sss");

list.add("ddd");

list.add("fff");

list.add("ggg");

Iterator 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方法,可以通过迭代器进行添加数据,而不用通过集合对象添加;

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 list= new ArrayList<>();

list.add("aaa");

http://list.add("sss");

list.add("ddd");

list.add("fff");

list.add("ggg");

Iterator 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 list1 = new ArrayList<>();

list1.add("111");

list1.add("222");

list1.add("444");

list1.add("666");

list1.add("888");

ListIterator 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()方法–因为当我们正序迭代完之后,光标指针已经到了尾部了;

System.out.println(iterator1.hasNext());

System.out.println(iterator1.hasPrevious());

while(iterator1.hasPrevious()){

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

}

}

补充:ListIterator和Iterator迭代器区别

a、listIterator继承自Iterator,继承结构如下所示。

public interface ListIterator extends Iterator

b、Iterator迭代器仅有三个方法,分别是hasNext()、next()和remove(),能够实现顺序遍历和元素的删除;我们来看一下使用迭代器删除list集合的元素:

System.out.println("\nIterator的remove方法:");

Iterator 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()方法添加元素:

System.out.println("\nListIterator的remove方法:");

ListIterator 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的逆序遍历:

System.out.println("\nListIterator的逆序遍历:");

while(iterator4.hasPrevious()){

String value = iterator4.previous();

System.out.print(value+" ");

}

d、ListIterator支持元素的修改,可以通过set方法对list现有的元素进行修改,注意,修改的是list的元素,当前的迭代器的元素的更改可能不会生效:

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+" ");

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:在线抓api接口网站(抓取网站api接口)
下一篇:Java开发环境配置及Vscode搭建过程
相关文章

 发表评论

暂时没有评论,来抢沙发吧~