Collection中常用的方法 Iterator (迭代器) contains remove

public static void main(String[] args) {
		//创建集合
		Collection c = new ArrayList();//多态
		
		c.add(1);//自动装箱
		c.add(new Integer(100));
		 
		Object o = new Object();
		c.add(o);//集合只能单个存储元素,只能存储引用类型
		
		Customer cus = new Customer("aaa",20);
		c.add(cus);
		
		System.out.println(c.size());//获取集合的个数
		
		System.out.println(c.isEmpty());//是否为空
		//c.clear();//清空元素
		System.out.println(c.isEmpty());//是否为空
		
		//将集合转化为Object类型的数组
		Object [] objs = c.toArray();
		for(int i = 0;i<objs.length;i++) {
			System.out.println(objs[i].toString());
		}
	}
}
class Customer{
	String name;
	int age;
	
	Customer(String name,int age){
		this.name = name;
		this.age = age;
	}//重写toString 
	public String toString() {
		return "Customer[name = "+name+",age = "+age+"]";
	}
}

Iterator   获取集合所依赖的迭代器对象 

通过迭代器中的方法完成集合的遍历(这是所有的集合通用的遍历方式)

	public static void main(String[] args) {
		Collection c = new LinkedList();
		
		c.add(100);
		c.add(false);
		c.add(11);
		
		//迭代1.获取迭代器对象
		//不需要关心底层集合的具体类型,所有集合的迭代器都实现了Java.util.Iterator接口
		
		//Iterator it = c.iterator();//面向接口去编程
									//it是一个引用,保存了内存地址,指向堆中的迭代器对象
		//System.out.println(it);//java.util.LinkedList$ListItr@9e89d68
		
		//调用方法完成迭代
		//while循环
		/*while(it.hasNext()) {
			Object element = it.next();
			System.out.println(element);
		}*/
		/*
		 * boolean b = it.hasNext();判断是否有更多的元素,如果有返回true
		 * Object o = it.next();将迭代器向下移动一位,并取出指向的元素
		 * 
		 * 原则::调用it.next()方法之前必须调用It.hasnext();
		 * 
		 */
		for(Iterator it = c.iterator();it.hasNext();) {
			Object o = it.next();
			System.out.println(o);
			
		}
	}
}

boolean contains(Object o)

boolean remove(Object o)

存储在集合中的元素应该去重写equals方法

public class contains {
	public static void main(String[] args) {
		Collection c = new ArrayList();
		
		Integer i1  =  new Integer(10);
		
		c.add(1);
		c.add(2);
		c.add(3);
		c.add(5);
		
		System.out.println(c.contains(i1));
		
		Integer i2 = new Integer(2);
		//contains方法底层调用的是equals方法 ,
		System.out.println(c.contains(i2));
		
		Manager m1 = new Manager(10,"aok");
		c.add(m1);
		System.out.println(c.contains(m1));
		
		Manager m2 = new Manager(10,"aok");
		System.out.println(c.contains(m2));//false 因为调用的是Object中的toString方法比较得是内存地址,
											//true 重写equals方法之后,比较内容
	}
}
class Manager{
	int no;
	String name;
	Manager(int no,String name){
		this.name = name;
		this.no = no;
	}
	//重写equals方法
	public boolean equals (Object o) {
		if(this==o) return true;
		if(o instanceof Manager) {
			Manager m = (Manager)o;//强转
			if(m.no==this.no&&m.name.equals(this.name));
			return true;
			
		}
		return false;
	}
}

remove

remove和contains中的方法都需要重写equals方法,因为Object中的equald方法比较的是内存地址,需要改为比较内容的

	Collection c = new ArrayList();
		Integer i1 = new Integer(10);
		 c.add(i1);
		 
		 Integer i2 = new Integer(10);
		 c.remove(i2);
		 System.out.println(c.size());//0
		 
		 Manager m1 = new Manager(100,"sss");
		 c.add(m1);
		 
		 Manager m2 = new Manager(100,"sss");
		 c.remove(m2);
		 
		 System.out.println(c.size());//0

迭代器所带的remove方法和集合自身所带的remove方法有什么不同

 最好调用迭代器的remove方法

 

 public static void main(String[] args) {
		Collection c = new ArrayList();
		
		 c.add(1);
		 c.add(2);
		 c.add(3);
		 
		 Iterator it = c.iterator();
		 while (it.hasNext()) {
			 it.next();
			 it.remove();  //通过迭代器删除
			 
			/* Object element = it.next();
			 c.remove(element);//出现问题
		 	*/
		 }
		 System.out.println(c.size());//0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值