2011-11-07 88 views
9

如何添加两组元素?从两组添加元素

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

我也必须返回设置。我怎么做?

+2

尝试使用addAll而不是添加 –

回答

29

使用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; 
} 
2

你不想要一套。正如你发现的那样,根据定义,它们没有重复的元素。您正在寻找一个Multiset(实际上,它的外观SortedMultiset),也被称为。 Java没有一个开箱即用,但有开源的实现可用,例如Google's

编辑:此外,你想要做setOne.addAll(setTwo),而不是一次一个元素,如上面评论,但这是次要问题。

+0

好吧,实际上我想稍后删除重复项。 –

+0

嗯,这绝对不是你最初问的问题,因为你的示例输出有重复。 –

+0

*包*和*列表*有什么区别? – Gabe

0

或者交替使用排序的ArrayList:

ArrayList<Integer> list = new ArrayList<Integer>(one); 
list.addAll(two); 
Collections.sort(list); 
+0

这不会消除重复。 – rakeeee

0

由于波希米亚人mentioned,最好的答案是使用Set.addAll()。请记住,如果您不介意覆盖其中一个套件,那么效率更高(至少从开发人员的时间角度看:P),以便将一组套件直接添加到另一套套件中:

one.addAll(two);