合并两个没有重复的列表

时间:2011-05-23 14:39:36

标签: java list set

我想将列表中的项目添加到另一个列表而不重复。我使用了下面涉及一组的方法。这是实现最终结果的最有效方式吗?是否有更简洁的方法来更新lista以包含唯一的setboth对象?

Set setboth = new HashSet(lista);
setboth.addAll(listb);
lista.clear();
lista.addAll(setboth);

5 个答案:

答案 0 :(得分:9)

看起来不错,但这取决于项是否实现了equals和hashCode。

HashSet数据结构依赖于equals和hashCode的有效实现。具有为两个实例显示相同字符串的toString()实现的类将不被视为同一实例,除非两个实例也返回相同的哈希代码,并在equals上返回true。

答案 1 :(得分:9)

或者你可以这样做:

list1.removeAll(list2);
list2.addAll(list1);

但它可能比使用HashSet慢,具体取决于List实现类。此外,它会更改原始列表之一(在您的上下文中可能是也可能不是选项)

答案 2 :(得分:2)

如果最终结果可以是任何Collection,您可以直接使用setBoth,而无需将所有结果复制到lista

答案 3 :(得分:1)

// CollectionUtils.intersection(ownerList,bcList)返回一个包含ownerList,bcList的集合

CollectionUtils.union将list of bc联合成一个唯一的列表

private List getAuthorisedBCList(List bcList,Set> bcOwnersList){         List listList = new ArrayList();

    for(List<String> ownerList : bcOwnersList){
        listList = (List<String>) CollectionUtils.union(listList,CollectionUtils.intersection(ownerList, bcList));
    }
    return listList;
}

答案 4 :(得分:1)

我知道这个问题已经得到解答,但我认为还有另一种方法可以帮助有人登陆此页面。

lista.add(listb);
listb.clear();
listb.add(new ArrayList<String>(new LinkedHashSet<String>(lista)));
相关问题