、有两个集合,A集合内容为:{1、2、3、4},B集合内容为:{1、2、5、6},两个集合的对称差定义为A Δ B = (A − B) ∪(B − A),上述A、B两集合的对称差为{3、4、5、6}。编写一个程序,用散列集求两个集合A、B的对称差集合,即求 (A − B) ∪(B − A),

解决方案 »

  1.   

    对称差就是把两个集合中不同的元素找出来,
    1、找出A中有B中没有的元素
    2、找出B中有A中没有的元素
    3、把1和2合并只要把equals的条件设定好,这个没什么难度
      

  2.   


    import java.util.ArrayList;
    import java.util.HashSet;
    public class Test {
    public static void main(String[] args){
    //init
    ArrayList<Integer> a1 = new ArrayList<Integer>();
    ArrayList<Integer> a2 = new ArrayList<Integer>();
    int[] arr1 = new int[]{1,2,3,4};
    int[] arr2 = new int[]{1,2,5,6};
    for(int i = 0;i < arr1.length;++i) a1.add(arr1[i]);
    for(int i = 0;i < arr2.length;++i) a2.add(arr2[i]);
    //get result
    ArrayList<Integer> result = findResult(a1, a2);
    System.out.println(result.toString());
    }
    private static ArrayList<Integer> findResult(ArrayList<Integer> a1,ArrayList<Integer> a2){
    @SuppressWarnings("unchecked")
    ArrayList<Integer> result = (ArrayList<Integer>) a1.clone();
    result.removeAll(a2);
    a2.removeAll(a1);
    result.addAll(a2);
    return result;
    }
    }
      

  3.   

      public static void main(String[] args) {
        
        Set<Integer> a = new HashSet<Integer>();
        a.addAll(Arrays.asList(1, 2, 3, 4));
        Set<Integer> b = new HashSet<Integer>();
        b.addAll(Arrays.asList(1, 2, 5, 6));
        
        System.out.println(symmetricDiff(a, b));
      }
      
      static <E> Set<E> symmetricDiff(Set<E> a, Set<E> b) {    assert a != null;
        assert b != null;    Set<E> result = new HashSet<E>(a);
        result.addAll(b);    for(E i : a)
          if( b.contains(i) )
            result.remove(i);
        return result;
      }
      

  4.   

      我错了    不好意思~~~><