添加两个集合中的元素

时间:2011-11-07 03:58:11

标签: java int set

如何添加两组元素?

If there's a set one (1, 3, 6, 8)
And a set two (2, 4, 6, 8)

我如何将这两者中的元素结合在一起?

Output should be (1, 2, 3, 4, 6, 8)

这是我试过的:

Set<Integer> one = new HashSet();
one.add(1);
one.add(3);
// and so on
Set<Integer> two = new HashSet();
two.add(2);
two.add(4);
// and so on
Set<Integer> newSet = new HashSet();
newSet.add(one);
newSet.add(two);

return newSet;

这不起作用,因为add方法仅适用于单个整数,而不适用于整数集合。有没有一种方法可以将两组一起添加?

我也必须退回套装。我该怎么做?

4 个答案:

答案 0 :(得分:35)

使用Set.addAll()

Set<Integer> one = new HashSet<Integer>();
Set<Integer> two = new HashSet<Integer>();
Set<Integer> newSet = new HashSet<Integer>(one);
newSet.addAll(two);

此外,您应该键入构造函数(如上所述)。

要将其转换为方法,请尝试以下方法:

public static Set<Integer> addTwoSets(Set<Integer> one, Set<Integer> two) {
    Set<Integer> newSet = new HashSet<Integer>(one);
    newSet.addAll(two);
    return newSet;
}

事实上,让我们完全疯了......这是一个方法,它将采用任何类型的任何类型的集合来扩展所需的类型,并将它们合并为一组:

public static <T> Set<T> merge(Collection<? extends T>... collections) {
    Set<T> newSet = new HashSet<T>();
    for (Collection<? extends T> collection : collections)
        newSet.addAll(collection);
    return newSet;
}

答案 1 :(得分:2)

你不想要一套。正如您所发现的,根据定义,它们没有重复的元素。您正在寻找 Multiset (事实上,看起来是SortedMultiset),也称为 Bag 。 Java没有开箱即用的功能,但有可用的开源实现,例如,Google's

编辑:此外,您想要setOne.addAll(setTwo),而不是一次一个元素,如上所述,但这是次要问题。

答案 2 :(得分:2)

作为波希米亚人mentioned,最好的答案是使用Set.addAll()。请记住,如果您不介意覆盖其中一个集合,那么将一个集合直接添加到另一个集合中会更有效(至少从开发人员的时间角度来看:P):

one.addAll(two);

答案 3 :(得分:0)

或者使用已排序的ArrayList:

ArrayList<Integer> list = new ArrayList<Integer>(one);
list.addAll(two);
Collections.sort(list);
相关问题