每日一道面试题之Iterator 和 ListIterator 有什么区别?

news/2024/11/19 6:41:47/

IteratorListIterator 都是 Java 集合框架中用于遍历集合元素的接口,但它们有一些区别:

使用的范围Iterator可以迭代所有集合,而ListIterator 只能用于List及其子类

继承关系ListIterator 继承 Iterator,并且ListIterator包含的方法更多

遍历的方向Iterator 接口只能向前遍历集合元素,而 ListIterator 接口可以双向遍历,即向前或向后遍历集合元素。

遍历的能力Iterator 接口只能遍历集合,而 ListIterator 接口除了遍历集合元素外,还可以修改集合中的元素添加新的元素,以及获取当前遍历位置的索引。

遍历的起点Iterator 接口的遍历起点是集合的开头,而 ListIterator 接口可以通过 hasPrevious()previous() 方法从集合的末尾开始遍历。

遍历的性能Iterator 接口的遍历性能通常比 ListIterator 接口更好,因为 ListIterator 接口需要维护额外的指针和索引信息。

示例如下所示:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;public class Test{public static void main(String[] args) {ArrayList<String> arrayList=new ArrayList<>();arrayList.add("张三");arrayList.add("李四");arrayList.add("王五");Iterator<String> iterator=arrayList.iterator();System.out.println("iterator遍历的结果为:");while(iterator.hasNext()){String element=iterator.next();System.out.print(element+" ");System.out.println();}ListIterator<String> listIterator=arrayList.listIterator();System.out.println("listIterator正向遍历的结果为:");while(listIterator.hasNext()){String element=listIterator.next();if(element.equals("王五")){//在遍历过程中,修改集合中的元素listIterator.set("Lisa");}System.out.println(element+" ");}ListIterator<String> listIterator2=arrayList.listIterator();System.out.println("listIterator修改后正向遍历的结果为:");while(listIterator2.hasNext()){String element=listIterator2.next();System.out.println(element+" ");}System.out.println("listIterator修改后反向遍历的结果为:");while(listIterator.hasPrevious()){String element=listIterator.previous();System.out.println(element+" ");}}
}

输出如下所示:

iterator遍历的结果为:
张三 
李四 
王五 
listIterator正向遍历的结果为:
张三 
李四 
王五 
listIterator修改后正向遍历的结果为:
张三 
李四 
Lisa 
listIterator修改后反向遍历的结果为:
Lisa 
李四 
张三

http://www.ppmy.cn/news/1000043.html

相关文章

Golang之路---02 基础语法——异常机制:panic 和 recover

Golang的异常处理 Go 没有像 Java 和 .NET 那样的 try/catch 异常机制&#xff1a;不能执行抛异常操作。 在 Golang 中&#xff0c;有不少常规错误&#xff0c;在编译阶段就能提前告警&#xff0c;比如语法错误或类型错误等&#xff0c;但是有些错误仅能在程序运行后才能发生&…

vue中axios的使用

什么是Axios Axios是一个基于Promise的HTTP客户端库&#xff0c;用于发送HTTP请求并处理响应。它可以在浏览器和Node.js环境中使用&#xff0c;并提供了许多功能&#xff0c;如拦截请求和响应、转换请求和响应数据、取消请求等。 使用场景&#xff1a; 发送AJAX请求&#xf…

【JS】运算符优先级汇总

文章目录 如果 OP1 和 OP2 具有不同的优先级&#xff08;见下表&#xff09;&#xff0c;则优先级最高的运算符先执行&#xff0c;不用考虑结合性。 console.log(3 10 * 2); // 输出 23 console.log((3 10) * 2); // 输出 26 因为括号改变了优先级如果 OP1 和 OP2 具有相同的…

Tomcat安装与管理

文章目录 Tomcat安装及管理Tomcat gz包安装&#xff1a;JDK安装&#xff1a;Tomcat安装&#xff1a;修改配置文件&#xff08;如下&#xff09;&#xff1a;服务启动配置&#xff1a; Tomcat-管理(部署jpress)&#xff1a;修改允许访问的主机修改允许管理APP的主机进入管理&…

【C++】类和对象-继承

0.前言 1.基本语法 继承的用处就是极大的减少代码的重复性&#xff0c;如果没有用继承&#xff0c;看看以下代码&#xff0c;你知道了。。。。 基本实现代码&#xff1a; #include <iostream> using namespace std; /******************************************/void …

数据库同步时,通过存储过程找出时间内发生变化的视图和物化视图

1. 应用场景 在软件开发或数据库运维过程&#xff0c;每一次数据库同步都是运维人员的痛苦的过程。 如果每次都是无脑全量更新&#xff0c;则工作量较大如果每次都是增量更新&#xff0c;则需要知道哪些视图谁在什么时候修改了&#xff0c;增加了什么信息&#xff08;因为往往…

【python学习笔记】extend() 方法和append()方法

当使用 extend() 方法时&#xff0c;可以将一个可迭代对象中的元素添加到列表中&#xff0c;而不是将整个可迭代对象作为单个元素添加到列表中。这样可以实现列表的扩展&#xff0c;而不是简单地将另一个可迭代对象作为单个元素添加到列表中。 # 使用 extend() 方法前 fruits …

2023最新AI艺术二维码制作软件教程【软件工具+教程】下载

2023最新AI艺术二维码傻瓜式生成教程&#xff0c;不需要市面上繁琐的安装步骤和显卡的配置要求&#xff01;我看了一眼市面上的要么只有视频教程&#xff0c;无工具纯纯牛马用来扯淡了。 要么就是安装繁琐&#xff0c;配置要求还高&#xff01; 这期教程教大家怎么傻瓜式制作…