Listiterator与iterator

本文主要介绍了Java中ListIterator与Iterator的关系,ListIterator是Iterator的子接口。详细阐述了二者的应用范围、遍历方向及各自包含的方法,还解答了课后习题,如ArrayList能用ListIterator的原因、二者区别等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天java课老师讲了listiterator与iterator的关系,粗浅地学习了一下。

ListIterator是iterator的子接口

Listiterator可以应用于List及其子类,Iterator可以应用于Collection及其子类

前者实现双向遍历,后者实现单向遍历

 

 

 

关于各自有的方法:

ListIterator迭代器包含的方法有:

add(E e): 将指定的元素插入列表,插入位置为迭代器当前位置之前

hasNext():以正向遍历列表时,如果列表迭代器后面还有元素,则返回 true,否则返回false

hasPrevious():如果以逆向遍历列表,列表迭代器前面还有元素,则返回 true,否则返回false

next():返回列表中ListIterator指向位置后面的元素

nextIndex():返回列表中ListIterator所需位置后面元素的索引

previous():返回列表中ListIterator指向位置前面的元素

previousIndex():返回列表中ListIterator所需位置前面元素的索引

remove():从列表中删除next()或previous()返回的最后一个元素(我的理解是调用next()或previous()方法后当前游标会指向之前的后一个或前一个元素,此时调用remove(),删除的也是他们的后一个或前一个元素)

set(E e):从列表中将next()或previous()返回的最后一个元素更改为指定元素e

 

Iterator迭代器包含的方法有:

hasNext():如果迭代器指向位置后面还有元素,则返回 true,否则返回false

next():返回集合中Iterator指向位置后面的元素

remove():删除集合中Iterator指向位置后面的元素(调用这个方法前必须确保至少调用过一次next(),并且调用过next()方法后只能调用一次remove()方法)

 

 

 

关于课后习题:

1.ArrayList为什么可以使用ListIterator?

答:ArrayList 继承了 AbstractList 这个抽象类,虽然AbstractList 类并未实现ListIterator接口,但是AbstractList 中定义了一个内部类 ListItr ,这个内部类实现了ListIterator接口及其所有的方法。

private class ListItr extends Itr implements ListIterator<E> {
            ListItr(int index) {
            cursor = index;
}

2.LinkedList为什么使用Iterator?

答:因为iterator可以应用于所有的集合,Set、List和Map以及这些集合的子类型。

3.iterator和ListIterator的区别

答:Iterator适用于Collection及其子类,即Set、List和Map以及这些集合的子类型,ListIterator仅适用于List及其子类;

       Iterator单向遍历,Listiterator双向遍历;

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

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

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

4.为什么ListIterator一开始不能从后往前遍历?

答:因为List Iterator一开始默认游标指向第一个值,要从后往前遍历必须指定游标的值。

如:ListIterator it = list.listIterator(list.size());

       while(iterator.hasPrevious()){

                it.previous();

       }

 

有错误或者不到位的地方,欢迎指正,嘿嘿嘿

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值