哪个更有效:使用 removeAll() 或使用以下 HashMap 技术在 ArrayList 中仅保留已更改的记录
我有2 s和相同的数据结构(hashCode()和equals()overred)。C 代表学生的记录。这两个列表的大小相同,分别代表新学生记录和旧记录(两个列表中的学生相同,顺序可能不同)。我希望只保留 A 中已更改的记录。因此,我做:ArrayList
A
B
C
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);
}
}
我认为这可能比上述解决方案的复杂性要低。这是对的吗?