[英]Merging ArrayList of Model elements without duplicates
嗨,我有两个数组列表列表l1和列表l2,名称,年龄,性别,uniqID,标记是列表中的数据。 我想加入l1和l2而没有重复项。uniqID对于每个学生都是唯一的。 我一直在遍历所有元素并比较每个元素。 但是我的清单中大约有2万个项目,因此循环需要太多时间。 我已经尝试过此帖子中的所有答案,但对我没有用。 有什么建议么。?
简单的例子:
public class Person{
int id;
String name;
//fields, getter, setter, constructor omited....
@Override
public boolean equals(Object o){
if (!(o instanceof Person)){
//implicit null check
return false;
}
return this.id==((Person)o).id;
}
@Override
public int hashCode(){
return this.id;
}
}
Person
类现在确实实现了equals和hashCode。 Java使用equals
来确定一个对象是否与另一个对象重复。 hashCode
本身不是必需的,但建议重写hashCode
并使其equals
。
如果两种方法都实现,则可以简单地使用java中的内置方法和数据结构:
带有列表:
List<Person> listA = new ArrayList<>();
List<Person> listB = new ArrayList<>();
// filling the lists omitted
List<Person> mergedList=new ArrayList<>();
mergedList.addAll(listA);
mergedList.removeAll(listB);
mergedList.addAll(listB);
或搭配:
List<Person> listA = new ArrayList<>();
List<Person> listB = new ArrayList<>();
// filling the lists omitted
Set<Person> mergedSet=new HashSet<>();
mergedSet.addAll(listA);
mergedSet.addAll(listB);
您可以组合两个arraylist并将其传递给HashSet对象,因为Set不包含重复项,您可以执行以下操作
ArrayList<String> a=new ArrayList<String>();
ArrayList<String> b=new ArrayList<String>();
b.addAll(a);
如果要保留元素的顺序,请使用LinkedHashSet
LinkedHashSet<String> result=new LinkedHashSet<String>(b);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.