详解JAVA中ListIterator和Iterator的辨析

 更新时间:2022年02月07日 09:31:47   作者:longshengguoji  
这篇文章主要为大家详细介绍了JAVAListIterator和Iterator的辨析,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

在使用java集合的时候,都需要使用Iterator。但是java集合中还有一个迭代器ListIterator,在使用List、ArrayList、LinkedList和Vector的时候可以使用。这两种迭代器有什么区别呢?下面我们详细分析。这里有一点需要明确的时候,迭代器指向的位置是元素之前的位置,如下图所示:    

这里假设集合List由四个元素List1、List2、List3和List4组成,当使用语句Iterator it = List.Iterator()时,迭代器it指向的位置是上图中Iterator1指向的位置,当执行语句it.next()之后,迭代器指向的位置后移到上图Iterator2所指向的位置。

首先看一下Iterator和ListIterator迭代器的方法有哪些。

Iterator迭代器包含的方法有:

  • hasNext():如果迭代器指向位置后面还有元素,则返回 true,否则返回false
  • next():返回集合中Iterator指向位置后面的元素
  • remove():删除集合中Iterator指向位置后面的元素

ListIterator迭代器包含的方法有:

  • add(E e): 将指定的元素插入列表,插入位置为迭代器当前位置之前
  • hasNext():以正向遍历列表时,如果列表迭代器后面还有元素,则返回 true,否则返回false
  • hasPrevious():如果以逆向遍历列表,列表迭代器前面还有元素,则返回 true,否则返回false
  • next():返回列表中ListIterator指向位置后面的元素
  • nextIndex():返回列表中ListIterator所需位置后面元素的索引
  • previous():返回列表中ListIterator指向位置前面的元素
  • previousIndex():返回列表中ListIterator所需位置前面元素的索引
  • remove():从列表中删除next()或previous()返回的最后一个元素(有点拗口,意思就是对迭代器使用hasNext()方法时,删除ListIterator指向位置后面的元素;当对迭代器使用hasPrevious()方法时,删除ListIterator指向位置前面的元素)
  • set(E e):从列表中将next()或previous()返回的最后一个元素返回的最后一个元素更改为指定元素e

一.相同点

都是迭代器,当需要对集合中元素进行遍历不需要干涉其遍历过程时,这两种迭代器都可以使用。

二.不同点

1.使用范围不同,Iterator可以应用于所有的集合,Set、List和Map和这些集合的子类型。而ListIterator只能用于List及其子类型。

2.ListIterator有add方法,可以向List中添加对象,而Iterator不能。

3.ListIteratorIterator都有hasNext()next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator不可以。

4.ListIterator可以定位当前索引的位置,nextIndex()previousIndex()可以实现。Iterator没有此功能。

5.都可实现删除操作,但是ListIterator可以实现对象的修改,set()方法可以实现。Iterator仅能遍历,不能修改。

三:Iterator和ListIterator用法示例

ListIterator用法:

package com.collection;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
/**
 * @author 朱伟
 * 链表中ListIterator测试
 *
 */
public class ListIteratorTest {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List<String> staff = new LinkedList<>();
		staff.add("zhuwei");
		staff.add("xuezhangbin");
		staff.add("taozhiwei");
		ListIterator<String> iter = staff.listIterator();
		String first = iter.next();
		//删除zhuwei
		iter.remove();
		//把zhuwei改为simei
		//iter.set("simei");
		System.out.println("first:"+first);
		iter.add("xiaobai");
		//遍历List元素
		System.out.println("遍历List中元素,方法一:");
		for(String str : staff)
			System.out.println(str+"   ");
		iter = staff.listIterator();
		System.out.println("遍历List中元素,方法二:");
		while(iter.hasNext())
		{
			System.out.println(iter.next());
		}
	}
}

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • SpringCloud Eureka 服务注册实现过程

    SpringCloud Eureka 服务注册实现过程

    这篇文章主要介绍了SpringCloud Eureka 服务注册实现过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • springcloud之Feign、ribbon如何设置超时时间和重试机制

    springcloud之Feign、ribbon如何设置超时时间和重试机制

    这篇文章主要介绍了springcloud之Feign、ribbon如何设置超时时间和重试机制,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Springboot发送邮件功能的实现详解

    Springboot发送邮件功能的实现详解

    电子邮件是—种用电子手段提供信息交换的通信方式,是互联网应用最广的服务。本文详细为大家介绍了SpringBoot实现发送电子邮件功能的示例代码,需要的可以参考一下
    2022-09-09
  • 详解SpringMVC加载配置Properties文件的几种方式

    详解SpringMVC加载配置Properties文件的几种方式

    这篇文章主要介绍了详解SpringMVC加载配置Properties文件的几种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-02-02
  • JProfiler11使用教程之JVM调优问题小结

    JProfiler11使用教程之JVM调优问题小结

    这篇文章主要介绍了JProfiler11使用教程之JVM调优,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • Java利用EasyExcel实现导出导入功能的示例代码

    Java利用EasyExcel实现导出导入功能的示例代码

    EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。本文废话不多说,直接上手试试,用代码试试EasyExcel是否真的那么好用
    2022-11-11
  • Mybatis 中的一对一,一对多,多对多的配置原则示例代码

    Mybatis 中的一对一,一对多,多对多的配置原则示例代码

    这篇文章主要介绍了 Mybatis 中的一对一,一对多,多对多的配置原则示例代码,需要的朋友可以参考下
    2017-03-03
  • java基础之方法详解

    java基础之方法详解

    这篇文章主要介绍了java基础之方法详解,文中有非常详细的代码示例,对正在学习java基础的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-07-07
  • MyBatis逆向⼯程的生成过程

    MyBatis逆向⼯程的生成过程

    MyBatis官方为我们提供了一个逆向工程,通过这个逆向工程,只要建立好数据表,那么MyBatis就会根据这个表自动生成pojo类、dao接口、sql映射文件
    2023-02-02
  • SpringBoot热部署启动关闭流程详解

    SpringBoot热部署启动关闭流程详解

    Spring Boot启动热部署是一种技术,它能让开发者在不重启应用程序的情况下实时更新代码。这样可以提高开发效率,避免频繁重启应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-04-04

最新评论