我有 2 ArrayList
sA
并且B
具有相同的数据结构C
(hashCode() 和 equals() 被覆盖)。C代表学生的记录。这两个列表大小相同,分别代表新学生记录和旧学生记录(两个列表中的学生相同,排序可能不同)。我希望只保留 A 中已更改的那些记录。因此,我这样做:
A.removeAll(B)
根据 javadocs,这将获取 A 的每条记录并与 B 的每条记录进行比较,如果发现两者相等,它将从 A 中删除记录。如果未发现 A 的记录与中的任何记录相等B,由于A中的所有学生也都在B中,这意味着A的记录发生了变化。问题是它很容易具有n平方复杂度。
另一种方法可以是:
Map<C> map = new HashMap<C>();
for (C record : B){
map.add(record.getStudentId(),record);
}
List<C> changedRecords = new ArrayList<C>();
for (C record : A){
if (record.equals(map.get(record.getStudentId())){
changedRecords.add(record);
}
}
我认为这可能比上述解决方案的复杂性更低。那是对的吗 ?