Java中定义一个迭代器(Iterator)遍历完一个集合后,如果还要再遍历一次这个集合?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中定义一个迭代器(Iterator)遍历完一个集合后,如果还要再遍历一次这个集合?相关的知识,希望对你有一定的参考价值。

为p集合定义了一个集合的迭代器,如:Iterator it = p.iterator();
那么这个迭代器能否反复对p集合进行迭代,即迭代完一次后,又从头开始迭代,用来解决集合元素的反复判断、处理;
还是说一个迭代器只能对一个集合迭代一次,如果it.hasNext()返回为false了,该迭代器就不能用了?

可以反复迭代,因为 iterator() 方法每次调用返回的都是一个新的 Iterator。

比如 List 的 iterator() 的实现(在 java.util.AbstractList 中):

参考技术A 实验证明:
创建Iterator对象遍历用一次,就不能再次使用。如果想再一次遍历必须新创建一个Iterator对象
参考技术B

java8 增强的Iterator遍历集合元素

Iterator接口也是Java集合框架的成员,与Collection和Map两个系列的集合不一样的是Collection和Map系列主要用于充当容器的作用,而Iterator正如其名字一样是主要用于迭代访问Collection集合中的元素,Iterator对象也被称为迭代器。

Iterator接口里面定义了下面4个方法:

》boolean hasNext():如果被迭代遍历的集合还没有被遍历完,返回True

》Object next():返回集合里面的下一个元素

》remove():删除集合里面上一次next()方法返回的元素

》void forEachRemaining(Consumer action):使用Lambda表达式来遍历集合元素,这是java8为Iterator新增的默认方法

下面给出一个实例

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;


public class Bike {

private String name;//自行车名
private double deposit;//押金

public Bike(){}
public Bike(String name,double deposit){
this.name=name;
this.deposit=deposit;
}

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getDeposit() {
return deposit;
}
public void setDeposit(double deposit) {
this.deposit = deposit;
}

public static void main(String[] args) {
List<Bike> bikes=new ArrayList<>();
bikes.add(new Bike("小黄车",99));
bikes.add(new Bike("摩拜单车",200));
bikes.add(new Bike("小鸣单车",100));
//遍历
Iterator it=bikes.iterator();
while(it.hasNext()){
Bike bike=(Bike)it.next();
System.out.println("[车型:"+bike.getName()+"][押金:"+bike.getDeposit()+"]");
}

}

输出效果如下:

[车型:小黄车][押金:99.0]
[车型:摩拜单车][押金:200.0]
[车型:小鸣单车][押金:100.0]








































以上是关于Java中定义一个迭代器(Iterator)遍历完一个集合后,如果还要再遍历一次这个集合?的主要内容,如果未能解决你的问题,请参考以下文章

迭代器(Iterator)

Java集合使用Iterator遍历Collection以及迭代器Iterator的执行原理

迭代器简介

java 中 iterator 为啥翻译成迭代器呢

9.8-全栈Java笔记:Iterator(迭代器)接口

java 数据结构:Iterator接口与foreach循环