Collection 中带有All结尾的常用方法:addAll(),removeAll(),containsAll(),retainAll()

Collection中带有All的方法: 

                                                       Collection list1 = new ArrayList(); 

                                                       Collection list2 = new ArrayList(); 

1. addAll():list1.addAll( list2 );  这句话的意思是:将list2集合中的所有的元素都一个个的添加进list1中。这样改变了list1的元素组成,但是没有改变list2的元素组成。

2. removeAll(): list1.remove(list2) ;  这句话的意思是:list1集合与list2集合 先  找到 交集,然后 在 list1中删除 交集 ,然后将删除交集后的list1重新赋给list1,list2中的元素不变,然后打印list1,这样就会输出 删除交集后的 list1 。 removeAll删除的是 两个集合的交集 。 

3. containsAll(): boolean flag = list1.containAlls(list2) ;  查看 list1中是否包含所有的list2中的元素,如果 list1 集合中 包含所有 的 list2集合中所有的元素,那么就返回 true ,否则返回 false 。

4. retainAll():  boolean flag = list1.retainAll(list2) ;  list1 和 list2 两个集合 先取 交集 。 然后 将交集 赋给 list1 , 如果 list1集合元素组成发生了变化,那么就返回 true , 否则返回 false 。特殊情况: list1 和 list2 两个集合 完全相同,所以 list1 和list2 的交集 就是他们 本身, 把交集 赋给 list1时 ,list1 没有发生任何的变化,所以返回 false 。综上所述:retainAll()中 只要list1发生变化,就返回 true,不发生变化就返回false 。

示例代码如下:

import java.util.ArrayList;
import java.util.Collection;

public class Main {
	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
	    /*
	    @SuppressWarnings("rawtypes")
		Collection c1 = new ArrayList() ;
		c1.add("a");
		c1.add("b");
		c1.add("c");
		c1.add("d");
		@SuppressWarnings("rawtypes")
		Collection c2 = new ArrayList() ; 
		c2.add("e");
		c2.add("f");
		boolean flag1 = c1.addAll(c2);
		System.out.println(flag1); //true。 
		System.out.println(c1); // 输出结果为:[a,b,c,d,e,f]
		//addAll()将c2中的所有的元素都一个个的添加进了c1中。
		System.out.println(c2);//输出结果为:[e,f]。
		//addAll的原理是: 将 c2的元素添加进c1中,然后改变c1中的元素组成,但是不改变c2的元素组成。
	     */
		Collection c1 = new ArrayList() ;
		c1.add("a");
		c1.add("b");
		c1.add("c");
		c1.add("d");
		
		Collection c2 = new ArrayList() ;
		c2.add("e");
		c2.add("f");
		
		c1.add(c2);
		System.out.println(c1);//输出结果为: [a, b, c, d, [e, f]]
		//addAll() 与 add() 之间的区别: 
		/*
		* addAll():是将c2中的元素一个个加入到c1中,改变c1的组成。 
		* add():是将c2看作一个整体,然后将c2整体添加到c1中,然后改变c1的组成。
		* */
	
		Collection c3 = new ArrayList() ;
		c3.add("a");
		c3.add("b");
		c3.add("c");
		c3.add("d");
		Collection c4 = new ArrayList() ;
		c4.add("a");
		c4.add("b");
		boolean flag2 = c3.removeAll(c4);
		System.out.println(flag2);//结果:true
		System.out.println(c3); //[c,d]  
		System.out.println(c4); //[a,b]
		//由上面可知: removeAll()的作用原理:先找到 c3 和 c4 的交集,然后在c3中删除交集,c4里面的元素保持不变。
		//删除的是交集。 
		
		
		Collection c6 = new ArrayList() ;
		c6.add("a");
		c6.add("b");
		c6.add("c");
		c6.add("d");
		Collection c7 = new ArrayList() ;
		c6.add("a");
		c6.add("b");
		boolean flag3 = c6.containsAll(c7) ; //判断c6中是否包含了c7(包含了:c7的所有的元素 ,c6 都必须拥有)。 
		System.out.println(flag3); //结果 : true。
		System.out.println(c6); //[a, b, c, d, a, b] 其实也改变了 c6调用者的组成。但是这个方法不用想太多。
		
		Collection c8 = new ArrayList() ;
		c8.add("a");
		c8.add("b");
		c8.add("z");
		boolean flag4 = c6.containsAll(c8);
		System.out.println(flag4);//结果为: false 。 因为c6中不包括 “z” 这个元素。
		System.out.println(c6);
		
		Collection c9 = new ArrayList();
		c9.add("a");
		c9.add("b");
		c9.add("c");
		c9.add("d");
		Collection c10 = new ArrayList();
		c10.add("c");
		c10.add("a");
		c10.add("z");
		boolean flag5 = c9.retainAll(c10);
		System.out.println(flag5);//true
		System.out.println(c9);//[a,c]。 之前的c9集合 元素组成是: [a,b,c,d]
		//retainAll() :c9和c10取交集,然后将交集赋给c9。这时候c9 被改变了。
	
	
	
		//没有交集,但是改变了调用者集合(c11)的元素组成,所以返回true。 
	
		Collection c11 = new ArrayList();
		c11.add("a");
		c11.add("b");
		c11.add("c");
		c11.add("d");
		Collection c12 = new ArrayList();
		c12.add("z");
		boolean flag6 = c11.retainAll(c12);//保留交集
		System.out.println(flag6);//true
		System.out.println(c11);//[ ]。没有交集,但是还是返回 true 。
	
	
		//出现的问题有:有交集返回true,没有交集返回ture。
		//什么情况下返回true,什么情况下返回false?
		//改变 调用者元素组成 返回 true,不改变 调用者的 元素组成 就 返回false 。
	
		//false 的情况: 
		Collection c13 = new ArrayList();
		c13.add("a");
		c13.add("b");
		c13.add("c");
		c13.add("d");
		
		Collection c14 = new ArrayList();
		c14.add("a");
		c14.add("b");
		c14.add("c");
		c14.add("d");
		boolean flag7 = c13.retainAll(c14);
		System.out.println(flag7); // 结果为: false  ;
		System.out.println(c13);   // 交集为: [a,b,c,d] ;  
		//没有改变 调用者 c13的 元素组成。
	
		//综上所述: retainAll() : 改变 调用者的集合(元素组成) 就返回true,否则是返回false。不管有没有交集。
	
		//重点:只要改变调用者集合的元素组成,不管有没有交集,都返回true,否则返回false 。
	}
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值