首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并/相交两组而不改变其中一组

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

Stack Overflow用户
提问于 2014-04-25 01:24:20
回答 1查看 52关注 0票数 1

这是我的密码:

代码语言:javascript
复制
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的正则输出是

代码语言:javascript
复制
[1, 2, 3]
[3, 4, 5]

但在做了手术室手术后,我得到的是

代码语言:javascript
复制
[1, 2, 3, 4, 5]
A:[1, 2, 3, 4, 5]
B:[3, 4, 5]

是的,它把这两个集合结合在一起,但是集合A被修改成是联合的结果,我希望它保持不变,所以集合A应该保持为1,2,3,而不是改变。

在和操作中也会发生相同的情况,其中我的结果是

代码语言:javascript
复制
 AND Operation
[3, 4, 5]
A:[3, 4, 5]
B:[3, 4, 5]

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-25 01:26:49

尝试创建一个新的临时设置,并在此基础上运行操作。

代码语言:javascript
复制
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;
    }
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23282665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档