联合/相交两组而不改变其中一组

时间:2014-04-25 01:24:20

标签: java set

所以这是我的代码:

import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.swing.event.ListSelectionEvent;

public enum SetOperation {

    AND(){
        public Set operate(Set one, Set two){
            one.retainAll(two);
            return one;
        }
    },

    OR(){
        public Set operate(Set one, Set two){
            one.addAll(two);
            return one;
        }
    };


    public abstract Set operate(Set one, Set two);

    public static void main(String[] args){

        Set<Integer> inta = new HashSet<Integer>();
        inta.add(1);
        inta.add(2);
        inta.add(3);

        Set<Integer> intb = new HashSet<Integer>();
        intb.add(3);
        intb.add(4);
        intb.add(5);


        System.out.println("A:" + inta);
        System.out.println("B:" + intb);
        System.out.println("\n Or Operation");
        System.out.println(SetOperation.OR.operate(inta, intb));
        System.out.println("A:" + inta);
        System.out.println("B:" + intb);
        System.out.println("\n AND Operation");
        System.out.println(SetOperation.AND.operate(inta, intb));
        System.out.println("A:" + inta);
        System.out.println("B:" + intb);
    }

}

我正在尝试做的是能够获得两个集合的交集和并集,但我的问题是在执行操作时,第一个集合被更改,我不希望这样。

这就是我的意思:

集合A和集合B的常规输出是

[1, 2, 3]
[3, 4, 5]

但在进行OR操作后,我得到的是

[1, 2, 3, 4, 5]
A:[1, 2, 3, 4, 5]
B:[3, 4, 5]

并且是的,它将两个集合联合起来,但是集合A被更改为联合的结果,并且我希望它保持相同,因此集合A应保持为[1,2,3]而不是更改。

AND操作也是如此,我的结果是

 AND Operation
[3, 4, 5]
A:[3, 4, 5]
B:[3, 4, 5]

返回不需要的结果,因为它从OR操作中获取集合A,这也不是我想要的。

有没有办法让我的套装在手术后不会改变?

1 个答案:

答案 0 :(得分:1)

尝试创建一个新的临时Set off和一个正在运行的操作。

AND(){
    public Set operate(Set one, Set two){
        Set temp = new HashSet<Integer>(one);
        temp.retainAll(two);
        return temp;
    }
},

OR(){
    public Set operate(Set one, Set two){
        Set temp = new HashSet<Integer>(one);
        temp.addAll(two);
        return one;
    }
};