三种遍历循环、Iterator迭代器 、ListIterator迭代器

本文详细探讨了for循环、foreach和迭代器在Java中遍历数组和集合的不同之处,包括修改权限、方法特性和适用场景,通过实例演示了如何在ArrayList上运用这些遍历方式,并介绍了Iterator和ListIterator的特性与区别。

for循环、for each、迭代器都可以进行数组与集合的遍历。

三种循环的区别与关联:《关于for循环,for each和迭代器遍历集合或者数组》

for循环:可以拿到数组元素下标,可以对数组进行修改,关心越界,关心强制类型转换。

for each:不能修改元素,使用封装好的类方法。底层用迭代器实现,无法remove。

迭代器:不能修改元素,使用封装好的类方法。可以remove。


以下是ArrayList 的三种遍历循环:

//Arraylist的三种遍历循环
ArrayList<String> list = new ArrayList<>();
list.add("你好哇!");
list.add("周周哇!");
System.out.println(list); //正常打印是因为底层利用了AbstractCollection的toString方法。

一、利用 for 循环遍历循环:

//第一种:利用for循环进行遍历:
for (int i = 0; i < list.size(); i++) {
     System.out.println(list.get(i) + " ");
}

二、利用 for each 循环遍历循环:

//第二种:利用for each进行遍历:
for (String s : list){
    System.out.println(s + " ");
}

三、利用迭代器遍历循环:继承Collection接口的都实现了迭代器方式。

Iterator<String> it1 = list.iterator();
while (it1.hasNext()){
    System.out.println(it1.next() + " ");
}
System.out.println("====List迭代器相关打印=====");
ListIterator<String> it2 = list.listIterator();
while (it2.hasNext()){
    System.out.println(it2.next() + " ");
}

Iterator 与 ListIterator 的区别可见该文章:《Iterator和ListIterator之间有什么区别?》

1、Iterator和ListIterator都能实现remove,remove首先需要next迭代出列表中的元素才能进行remove,但ListIterator可以通过set() 实现修改,Iterator只能遍历。

2、ListIterator中的方法更多,例如add。

3、Iterator只能单向遍历,ListIterator可以双向遍历。


其中remove与add方法示例如下:

//Iterator/ListIterator的remove
ArrayList<String> list5 = new ArrayList<>();
list5.add("鹅鹅鹅");
list5.add("曲项向天歌");
Iterator<String> it3 = list5.iterator();
while (it3.hasNext()){ //迭代器删除首先需要使用next方法迭代出集合中的元素,然后才能调用remove方法
     String ret = it3.next();
     if (ret.equals("鹅鹅鹅")){
          it3.remove();
     }else {
          System.out.println(ret + " ");
     }
}
System.out.println("======================");

//ListIterator的add(Iterator没有add)
ArrayList<String> list6 = new ArrayList<>();
list6.add("123");
list6.add("木头人");
ListIterator<String> it4 = list6.listIterator();
while (it4.hasNext()){
     String ret = it4.next();
     if (ret.equals("123")){
         it4.add("那么就");
     }else{
         System.out.println(ret + " ");
     }
}
     System.out.println(list6);

### 如何实现一个用于遍历列表的自定义迭代器 在 Python 中,创建一个可以遍历列表的自定义迭代器需要遵循迭代器协议,即定义 `__iter__` 和 `__next__` 方法。以下是一个具体的实现示例[^1]。 ```python class ListIterator: def __init__(self, data): self.data = data # 存储要遍历的列表 self.index = 0 # 当前索引位置 def __iter__(self): return self # 返回迭代器自身 def __next__(self): if self.index < len(self.data): # 检查是否还有元素 result = self.data[self.index] self.index += 1 return result else: raise StopIteration # 抛出停止迭代异常,表示迭代结束 ``` 通过上述代码,我们可以创建一个迭代器对象,并使用它来遍历列表中的所有元素。例如: ```python # 创建一个列表 my_list = [1, 2, 3, 4] # 创建迭代器 iterator = ListIterator(my_list) # 使用 next() 函数遍历列表 print(next(iterator)) # 输出 1 print(next(iterator)) # 输出 2 print(next(iterator)) # 输出 3 print(next(iterator)) # 输出 4 # 再次调用会抛出 StopIteration 异常 # print(next(iterator)) ``` 此外,还可以将该迭代器用于 `for` 循环中,以更简洁的方式遍历列表[^2]: ```python for item in ListIterator(my_list): print(item) ``` 如果希望实现类似功能但不依赖类定义,也可以使用闭包来创建迭代器[^3]。以下是一个基于闭包的实现示例: ```lua -- 定义一个数组 local array = {1, 2, 3, 4} -- 定义一个多状态迭代器 local function elementIterator(collection) local index = 0 local count = #collection -- 返回一个闭包作为迭代器 return function() index = index + 1 if index <= count then return collection[index] end end end -- 使用迭代器遍历数组 for element in elementIterator(array) do print(element) end ``` 尽管上述 Lua 示例展示了如何使用闭包实现迭代器,但在 Python 中,推荐使用类或生成器来实现更复杂的迭代逻辑[^4]。 最后需要注意的是,迭代器和生成器不能直接使用切片操作。如果需要对迭代器进行切片,可以使用 `itertools.islice` 函数[^5]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值