Java中定义一个迭代器(Iterator)遍历完一个集合后,如果还要再遍历一次这个集合?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中定义一个迭代器(Iterator)遍历完一个集合后,如果还要再遍历一次这个集合?相关的知识,希望对你有一定的参考价值。
为p集合定义了一个集合的迭代器,如:Iterator it = p.iterator();
那么这个迭代器能否反复对p集合进行迭代,即迭代完一次后,又从头开始迭代,用来解决集合元素的反复判断、处理;
还是说一个迭代器只能对一个集合迭代一次,如果it.hasNext()返回为false了,该迭代器就不能用了?
可以反复迭代,因为 iterator() 方法每次调用返回的都是一个新的 Iterator。
比如 List 的 iterator() 的实现(在 java.util.AbstractList 中):
创建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)遍历完一个集合后,如果还要再遍历一次这个集合?的主要内容,如果未能解决你的问题,请参考以下文章