У меня есть 2 ArrayList
s A
и 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);
}
}
Я думаю, что это может быть менее сложным, чем решение выше. Это правильно?