在Java中使用3个集合的操作

时间:2017-04-11 18:54:36

标签: java set operations

我有3套,我正在使用sets

 HashSet<String> set_1 =new HashSet<String>();  
 set_1.add("1");  
 set_1.add("2");  
 set_1.add("3");  

HashSet<String> set_2 =new HashSet<String>();  
 set_2.add("4");  
 set_2.add("5");  
 set_2.add("6"); 

HashSet<String> set_3 =new HashSet<String>();  
 set_3.add("7");  
 set_3.add("8");  
 set_3.add("9");  

我需要计算这些集合的并集,交集,差异和功效

我用联盟

尝试了这个
Set<String> uni_temp = new HashSet<String>();
uni_temp.addAll(set_1);
uni_temp.addAll(set_2);
uni_temp.addAll(set_3);

但它只使set_1set_2的联合如此

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

4 个答案:

答案 0 :(得分:2)

如果您初始化set_1set_2set_3,如下所示,您的工会尝试就会有效:

Set<String> set_1 = new HashSet<String>(Arrays.asList("1", "2", "3"));
Set<String> set_2 = new HashSet<String>(Arrays.asList("4", "5", "6"));
Set<String> set_3 = new HashSet<String>(Arrays.asList("7", "8", "9"));

Set<String> uni_temp = new HashSet<String>();
uni_temp.addAll(set_1);
uni_temp.addAll(set_2);
uni_temp.addAll(set_3);

System.out.println(Arrays.toString(uni_temp.toArray())); //[1, 2, 3, 4, 5, 7, 8, 9]

修改:如果您将字符串添加到适当的变量名称而不是未知变量set,则更新的代码将起作用:

HashSet<String> set_1 = new HashSet<String>();  
set_1.add("1");  
set_1.add("2");  
set_1.add("3");  

HashSet<String> set_2 = new HashSet<String>();  
set_2.add("4");  
set_2.add("5");  
set_2.add("6"); 

HashSet<String> set_3 = new HashSet<String>();  
set_3.add("7");  
set_3.add("8");  
set_3.add("9");

一般情况下,假设您有两个变量名为ab 的集:

获取交叉点a.retainAll(b);

获得差异a.removeAll(b);

答案 1 :(得分:1)

您可以尝试:

HashSet<String> union = new HashSet<String>(set_1);
union.addAll(set_2);
union.addAll(set_3);
System.out.println(union);

HashSet<String> intersection = new HashSet<String>(set_1);
intersection.retainAll(set_2);
intersection.retainAll(set_3);
System.out.println(intersection);

答案 2 :(得分:0)

使用您的示例,您应该从代码中获取联合,如以下示例所示

    Set<Integer> set1 = new HashSet<>();
    Set<Integer> set2 = new HashSet<>();
    Set<Integer> set3 = new HashSet<>();

    for(int i = 1; i < 4; i++)
    {
        set1.add(i);
        set2.add(i + 3);
        set3.add(i + 6);
    }

    Set<Integer> uni_temp = new HashSet<Integer>();
    uni_temp.addAll(set1);
    uni_temp.addAll(set2);
    uni_temp.addAll(set3);

    java.util.Iterator<Integer> iterator = uni_temp.iterator();
    while(iterator.hasNext())
    {
        System.out.println(iterator.next());
    }

输出

1
2
3
4
5
6
7
8
9

注意我使用的是Integers而不是Strings

答案 3 :(得分:0)

您也可以使用Google收藏集中的Sets.union()

Sets.union(Sets.union(a, b), c);