Collection(二)Iterator

本文介绍了Java中的迭代器模式,展示了如何使用迭代器遍历集合并移除符合条件的元素,同时探讨了迭代器模式的优点及适用场景。

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

 

import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;

public class TestIterator {
	public static void main(String[] args) {
		Collection c = new HashSet();//Set是无序的,不可重复的
		c.add(new Name("ss", "dd"));
		c.add(new Name("bb", "dso"));
		c.add(new Name("iisd", "dfg"));
		Iterator iterator = c.iterator();//当调用iterator方法时,就将自己的对象返回。至于具体是什么对象不用管,这里运用了多态
		while(iterator.hasNext()){//通过返回的对象遍历里面的元素
			Name name = (Name)iterator.next();
			System.out.println(name.getFirstName());
		}
		for(Iterator i=c.iterator();i.hasNext();){
			Name n = (Name)i.next();
			if(n.getFirstName().length()>3){
				i.remove();//换成c.remove(name)会产生异常,因为Iterator是同步的,会将当前元素锁住,不允许其他方法访问。
			}		
		}
		System.out.println(c);
	}
}


Iterator迭代器模式,又叫做游标(Cursor)模式,它提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节,为遍历不同的容器结构提供一个统一的接口(多态迭代)。

迭代器模式给容器的应用带来以下好处:

  1) 支持以不同的方式遍历一个容器角色。根据实现方式的不同,效果上会有差别。

  2) 简化了容器的接口。但是在java Collection中为了提高可扩展性,容器还是提供了遍历的接口。

  3) 对同一个容器对象,可以同时进行多个遍历。因为遍历状态是保存在每一个迭代器对象中的。

由此也能得出迭代器模式的适用范围:

  1) 访问一个容器对象的内容而无需暴露它的内部表示。

  2) 支持对容器对象的多种遍历。

  3) 为遍历不同的容器结构提供一个统一的接口(多态迭代)。

 

Name类:

public class Name {
	private String firstName;
	private String lastName;
	public Name(String firstName, String lastName){
		this.firstName = firstName;
		this.lastName = lastName;
	}
	//当使用contains,removes时,需要在本类中重写equals方法
	public boolean equals(Object o){
		if(o instanceof Name){
			Name name = (Name)o;
			return (firstName.equals(name.firstName))&&(lastName.equals(name.lastName));
		}
		return super.equals(o);
	}
	public String getFirstName() {
		return firstName;
	}
	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}
	public String getLastName() {
		return lastName;
	}
	public void setLastName(String lastName) {
		this.lastName = lastName;
	}
	//重写equals应该重写hashCode方法,两对象相互equals他们的hashCode必须相等;
	//当一个对象作为索引(Map里的键)时要用hashCode
	public int hashCode(){
		return firstName.hashCode();
	}
	public String toString(){
		return firstName+","+lastName;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值