从两个集合添加元素

2022-09-03 16:47:34

如何从两个集合中添加元素?

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 方法仅适用于单个整数,而不适用于整数集合。有没有一种方法可以将两个集合加在一起?

我还必须归还这套。我该怎么做?


答案 1

Use 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;
}

或者 Java 8+:

public static <T> Set<T> merge(Collection<? extends T>... collections) {
    return Arrays.stream(collections).flatMap(Collection::stream).collect(toSet());
}

答案 2

你不想要一个集合。正如您已经发现的那样,根据定义,它们没有重复的元素。您正在寻找一个多集(实际上是按其外观排序的多集),也称为Bag。Java没有开箱即用的,但有可用的开源实现,例如Google的

编辑:另外,正如上面评论的那样,您想一次不做一个元素,但这是次要问题。setOne.addAll(setTwo)


推荐