所以这是我的代码:
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,这也不是我想要的。
有没有办法让我的套装在手术后不会改变?
答案 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;
}
};