2つのArrayList
同じデータ構造(hashCode()とequals()がオーバーライドされています)があります。Cは学生の記録を表します。2つのリストは同じサイズで、それぞれ新しい学生の記録と古い記録を表しています(学生は両方のリストで同じであり、順序が異なる場合があります)。変更されたAのレコードのみを保持したいと思います。そういうものとして、私はします: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);
}
}
これは、上記のソリューションよりも複雑さが少ないと思います。あれは正しいですか ?