今天面试突然想起以前工做的时候碰到过这样一个问题:多个复选框,用户可选择多个,前台只传回了用户每次的选择,首次的话当然好办,只有添加操做,可是若是是第二次,就会从弧线添加删除两个操做,显然对数据库进行一次删除再一次添加这种方法是十分很差的。因此咱们就得从本次用户选择传回来的数组与上次用户选择的数组进行对比,筛选出新添加的以及旧删除的。面试
举个例子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);复制代码
获得结果以下: bash
若是还有更好的方法欢迎你们留言,共同进步增加~ spa