java中N个列表的并集

java中N个列表的并集,java,collections,Java,Collections,在java中创建N个列表的联合的最佳方法是什么 例如 List<Integer> LIST_1 = Lists.newArrayList(1); List<Integer> LIST_2 = Lists.newArrayList(2); List<Integer> LIST_3 = Lists.newArrayList(3); List<Integer> LIST_4 = Lists.newArrayList(4); List<Int

在java中创建N个列表的联合的最佳方法是什么

例如

List<Integer> LIST_1 = Lists.newArrayList(1);

List<Integer> LIST_2 = Lists.newArrayList(2);

List<Integer> LIST_3 = Lists.newArrayList(3);

List<Integer> LIST_4 = Lists.newArrayList(4);

List<Integer> LIST_1_2_3_4 = Lists.newArrayList(1,2,3,4);

assert LIST_1_2_3_4.equals(union(LIST_1,LIST_2,LIST_3,LIST_4)); 

The union method will take a var args parameter

<Item> List<Item> union(List<Item> ... itemLists)
List List_1=Lists.newArrayList(1);
List List_2=Lists.newArrayList(2);
List List_3=Lists.newArrayList(3);
List List_4=Lists.newArrayList(4);
List List_1_2_3_4=Lists.newArrayList(1,2,3,4);
断言LIST_1_2_3_4.equals(并集(LIST_1,LIST_2,LIST_3,LIST_4));
union方法将采用var args参数
列表联合(列表…项目列表)

是否有提供此方法的库。最简单的方法是在数组中循环并将每个列表累加为一个

我不确定您所说的最佳解决方案是什么,但简单的解决方案需要使用
addAll
方法

为了获得额外的性能,您还可以通过将所有大小相加来提示大小

newarraylist(totalSizeHere)


也可以看到这个答案:

可能有一个库,但仅为这3行代码包含它可能不值得再依赖

private static <Item> List<Item> union(List<Item> ... itemLists)
{
    List<Item> result = new ArrayList<Item>();
    for (List<Item> list : itemLists) result.addAll(list);
    return result;
}
私有静态列表联合(列表…项目列表)
{
列表结果=新建ArrayList();
for(List:itemLists)result.addAll(List);
返回结果;
}
您可以使用:


apache collections:,java.util.List)@GrahamGriffiths这似乎只适用于2个列表…或guava:您应该使用一个集合来避免重复的元素,然后返回一个包含您构建的集合中的元素的列表。要避免增加结果列表中内部数组的大小,我会计算结果列表的总大小,然后用总大小创建它。只需循环遍历itemLists,求和它们的大小,并将其作为argumento传递给结果ArrayListcontructor@ZouZou然而,这并不是列表的真正联合,因为每个列表本身都可能包含重复项。@ZouZou这不是问题的一部分。也许元素应该和它们在列表中出现的频率一样多?如果不应该有重复项,那当然是对的。@Thomas我在想一种更数学的方法,即作为参数传递的列表不包含重复的元素。如果不是这样,那么答案是正确的。
Iterables.concat
返回一个
Iterable
。我没有找到将
Iterable
作为输入的ArrayList构造函数。相反,我使用了番石榴的
列表
如下:
LIST.newArrayList(Iterables.concat(LIST_1,LIST_2,LIST_3,LIST_4))
List<Integer> joined = new ArrayList<>( Iterables.concat(LIST_1, LIST_2, LIST_3, LIST_4) );
Iterables.elementsEqual( LIST_1_2_3_4, Iterables.concat(LIST_1, LIST_2, LIST_3, LIST_4) );