Java中的Iterator(迭代器)

Java中的Iterator是一个设计模式,提供了一种访问容器对象中元素的方法而不暴露其内部细节。迭代器支持单向移动,主要方法包括iterator()、next()和hasNext()。在示例代码中,展示了如何使用Iterator遍历排序后的ArrayList。Iterator模式有三个关键作用:支持不同遍历方式、简化聚合接口和允许多个遍历同时进行,还提供了多态迭代的支持。

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

迭代器的定义为:提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。同时迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象。与聚合对象耦合,在一定程度上限制了它的广泛运用,一般仅用于底层聚合支持类。
Java中的iterator功能比较简单,并且只能单向移动;
1.使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。
(注意:iterator()方法是java.lang.Iterable接口,被Collection继承。)
2. 使用next()获得序列中的下一个元素。
3. 使用hasNext()检查序列中是否还有元素。
Iterator是Java迭代器最简单的实现,例:
首先使用Comparable排序接口并封装nubmer、name、score;

class PiXu implements Comparable<PiXu>{
 
	private int number;
	private int name;
	private int score;
	
	public PiXu(int number, int name, int score) {
		super();
		this.number = number;
		this.name = name;
		this.score = score;
	}

	public int getNumber() {
		return number;
	}

	public void setNumber(int number) {
		this.number = number;
	}

	public int getName() {
		return name;
	}

	public void setName(int name) {
		this.name = name;
	}

	public int getScore() {
		return score;
	}

	public void setScore(int score) {
		this.score = score;
	}

	@Override
	public int compareTo(PiXu o) {
		// TODO Auto-generated method stub
		if (this.score!=o.score) {
			return o.score-this.score;
		} else {
			return this.number-o.number;

		}
	}
	
}

利用Random类和ArrayList向List中加入数据,并使用sort排序:

List<PiXu>list = new ArrayList<>();
		
		for (int i = 1; i <41; i++) {
			Random random = new Random();
			int k = 50 +random.nextInt(51);
			list.add(new PiXu(i, i, k));
		}
		Collections.sort(list);

最后使用迭代器遍历输出列表数据:

		Iterator<PiXu> iterator = list.iterator();
		while (iterator.hasNext()) {
			PiXu piXu = (PiXu) iterator.next();
			if (piXu.getName()<10) {
				System.out.println("姓名:学生0"+piXu.getName()+"   "+"学号:17010"+piXu.getNumber()+"  "+"成绩"+piXu.getScore());
			} else {
				System.out.println("姓名:学生"+piXu.getName()+"   "+"学号:1701"+piXu.getNumber()+"  "+"成绩"+piXu.getScore());
			}
			
		}

完整代码如下:

	public static void main(String[] args) {
		List<PiXu>list = new ArrayList<>();
		
		for (int i = 1; i <41; i++) {
			Random random = new Random();
			int k = 50 +random.nextInt(51);
			list.add(new PiXu(i, i, k));
		}
		Collections.sort(list);
		
		Iterator<PiXu> iterator = list.iterator();
		while (iterator.hasNext()) {
			PiXu piXu = (PiXu) iterator.next();
			if (piXu.getName()<10) {
				System.out.println("姓名:学生0"+piXu.getName()+"   "+"学号:17010"+piXu.getNumber()+"  "+"成绩"+piXu.getScore());
			} else {
				System.out.println("姓名:学生"+piXu.getName()+"   "+"学号:1701"+piXu.getNumber()+"  "+"成绩"+piXu.getScore());
			}
			
		}
		
	}

效果如下:
在这里插入图片描述
Iterator模式有三个重要的作用:

  1. 它支持以不同的方式遍历一个聚合 复杂的聚合可用多种方式进行遍历,如二叉树的遍历,可以采用前序、中序或后序遍历。迭代器模式使得改变遍历算法变得很容易: 仅需用一个不同的迭代器的实例代替原先的实例即可,你也可以自己定义迭代器的子类以支持新的遍历,或者可以在遍历中增加一些逻辑,如有条件的遍历等。
  2. 迭代器简化了聚合的接口,有了迭代器的遍历接口,聚合本身就不再需要类似的遍历接口了,这样就简化了聚合的接口。
  3. 在同一个聚合上可以有多个遍历 每个迭代器保持它自己的遍历状态,因此可以同时进行多个遍历。
  4. Iterator模式可以为遍历不同的聚合结构(需拥有相同的基类)提供一个统一的接口,即支持多态迭代。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值