合并两个没有重复的列表

edw*_*yte 9 java list set

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

Set setboth = new HashSet(lista);
setboth.addAll(listb);
lista.clear();
lista.addAll(setboth);
Run Code Online (Sandbox Code Playgroud)

Kaj*_*Kaj 9

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

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

  • 如果他已创建了两个不同实例应被视为同一实例的类(例如,具有相同社会安全号的两个实例应被视为一个人的Person类) (2认同)
  • @Robin Green覆盖`equals`是不够的,如果你使用基于哈希的数据结构,你还需要覆盖`hashCode` (2认同)

Sea*_*oyd 9

或者你可以这样做:

list1.removeAll(list2);
list2.addAll(list1);
Run Code Online (Sandbox Code Playgroud)

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