У меня есть 2 ArrayList
A
и B
той же структуры данных C
(hashCode() и равно() переопределено). C представляет собой запись студента. Два списка имеют одинаковый размер и представляют собой новые записи студентов и старые (соответственно, ученики одинаковы в обоих списках, порядок может отличаться). Я хочу сохранить только те записи в A, которые были изменены. Как таковой, я:
A.removeAll(B)
В соответствии с javadocs это займет каждую запись A и сравнится с каждой записью B, и если она найдет равную, она удалит запись из A. Если запись A не будет найдена равной любая запись в B, и поскольку все ученики в также находятся в 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);
}
}
Я думаю, что это может быть более сложной задачей, чем вышеупомянутое решение. Это правильно?