java删除增加一体数组操作(交并差问题)

163 阅读1分钟

       今天面试忽然想起之前工作的时候碰到过这样一个问题:多个复选框,用户可选择多个,前台只传回了用户每次的选择,首次的话固然好办,只有添加操作,但是如果是第二次,就会从弧线添加删除两个操作,显然对数据库进行一次删除再一次添加这种方法是十分不好的。所以我们就得从本次用户选择传回来的数组与上次用户选择的数组进行对比,筛选出新添加的以及旧删除的。

       举个例子1-10的复选框,用户一次选了1,2,3保存后,第二次打开用户选了2,3,4,5那么我们就得找出 1 是我们要删除的,4和5是我们要添加的。 其实这就是一个交并差的问题,当时我还没想到,自己傻傻的写了一个剔除的方法,后面我找找有的话会贴出来。现在说说这个问题的解决方法。

     Collection集合提供了 求交集方法:A.retainAll(B) ;求并集方法A.addAll(B);求差集的方法:A.removeAll(B)。 以上这三个方法灵活运用就可以解决咱上面这个问题了。

		Collection<Integer> a = new HashSet<Integer>();
		a.add(1);
		a.add(2);
		a.add(3);
		
		Collection<Integer> b = new HashSet<Integer>();
		b.add(2);
		b.add(3);
		b.add(4);
		b.add(5);
		
		//求并集
		Collection<Integer> c = new HashSet<Integer>();
		c.addAll(a);
		c.addAll(b);
		
		//得到需添加的复选框数
		c.removeAll(a);
		System.out.println("需要添加数:"+c);
		
		//得到需删除的复选框数
		a.removeAll(b);
		System.out.println("需要删除数:"+a);

得到结果如下:     


如果还有更好的方法欢迎大家留言,共同进步增长~