java中Iterator与ListIterator以及其两者的区别

硅谷探秘者 算法基础 923 0 0

Iterator主要方法

hasNext():如果迭代器中还有元素,则返回true。

next():返回迭代器中的下一个元素

remove():删除迭代器新返回的元素。

需要注意的是:

(1)Iterator只能单向移动。

(2)Iterator.remove()是唯一安全的方式来在迭代过程中修改集合;如果在迭代过程中以任何其它的方式修改了基本集合将会产生未知的行为。而且每调用一次next()方法,remove()方法只能被调用一次,如果违反这个规则将抛出一个异常。

ListIterator

ListIterator是一个功能更加强大的, 它继承于Iterator接口,只能用于各种List类型的访问。可以通过调用listIterator()方法产生一个指向List开始处的ListIterator, 还可以调用listIterator(n)方法创建一个一开始就指向列表索引为n的元素处的ListIterator。

主要的方法有:add、hasNext、hasprevious、next、nextIndex、previous、remove、set等。根据源码中的定义,我们可以得出ListIterator可以

  • (1)双向移动(向前/向后遍历).
  • (2)产生相对于迭代器在列表中指向的当前位置的前一个和后一个元素的索引.
  • (3)可以使用set()方法替换它访问过的最后一个元素.
  • (4)可以使用add()方法在next()方法返回的元素之前或previous()方法返回的元素之后插入一个元素.

Iterator与ListIterator的主要区别总结

  • (1)ListIterator有add()方法,可以向List中添加对象,而Iterator不能
  • (2)ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。
  • (3)ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。
  • (4)都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现。Iierator仅能遍历,不能修改。

评论区
请写下您的评论...
暂无评论...
猜你喜欢
weblog 4060 int和Integer 说起int和Integer大家耳熟能详是: int是java基本数据类型,而Integer是引用类型。 Integer必须实例化后才能使用,而
算法基础 1206 Java遍历集合方式list集合为例,有三种遍历方式。ListStringlist=newArrayList(); list.add("2"); list.add("2"); list.add
算法基础 1103 1.InnoDB支持事务,MyISAM不支持事务2.InnoDB支持外键,而MyISAM不支持。对一个包含外键InnoDB表转为MYISAM会失败3.InnoDB是聚集索引,使用B+Tree作为索
java基础 3486 局结构,在Java语言里就显得有些粗糙了,实际内存域划分要比这更复杂。不过这种划分方式流行也间接说明了程序员最关注对象内存分配关系最密切域是“堆”和“栈”块。,“堆”在稍后笔
javascript,前端 780 jsjavascriptforin和forof,forof遍历原理 一、 forin是ES5语法,forof是ES6语法forin是无序遍历数组或对象,也就是随机遍历,不按照顺序来
weblog 3477 String类实现不可变性 对于String类实现从源码看出,String类底层维护着一个final修饰char数组,用来储存字符。并且除了hash这个属性它属性都声明为
vue 479 true时,都会占据页面位置 二、v-showv-if 控制手段不同编译过程不同编译条件不同 控制手段:v-show隐藏则是为该元素添加css—display:none,dom元素依旧还在。v-
linux系统 3609 务并没有结束,他仍然在进程他只是维持挂起状态,用户可使用fg/bg操作继续前台或后台任务,fg命令重新启动前台被任务,bg命令把被任务放在后台执行。使用jobs命令查看当前有多少在后
归档
2018-11  12 2018-12  33 2019-01  28 2019-02  28 2019-03  32 2019-04  27 2019-05  33 2019-06  6 2019-07  12 2019-08  12 2019-09  21 2019-10  8 2019-11  15 2019-12  25 2020-01  9 2020-02  5 2020-03  16 2020-04  4 2020-06  1 2020-07  7 2020-08  13 2020-09  9 2020-10  5 2020-12  3 2021-01  1 2021-02  5 2021-03  7 2021-04  4 2021-05  4 2021-06  1 2021-07  7 2021-08  2 2021-09  8 2021-10  9 2021-11  16 2021-12  14 2022-01  7 2022-05  1 2022-08  3 2022-09  2 2022-10  2 2022-12  5 2023-01  3 2023-02  1 2023-03  4 2023-04  2 2023-06  3 2023-07  4 2023-08  1 2023-10  1 2024-02  1 2024-03  1 2024-04  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础 xxl-job rabbitmq haproxy srs 音视频 webrtc javascript
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。