我有一個名爲Task
我不能觸摸,因爲它是一個傳統的代碼,我有兩個ArrayList
由Task
類,我需要比較的類。項目可以以任何順序存在,也可以在ArrayList中有重複項目。比較兩個ArrayList中的兩種比較?
什麼是最好的方法來比較兩個ArrayList
其中的對象,並打印出缺失的元素,以及哪些不在列表中。下面的代碼是正確和有效的方法嗎?我無法爲此使用任何外部庫。
我需要在兩種方式比較我的兩個數組列表。
- 如果數據在源代碼中但實際上不是,則返回false並打印出缺少的元素。
- 如果數據是實際但不在源中,那麼也返回false並打印出缺失的元素。
下面是我的代碼:
public static boolean compare(List<Task> source, List<Task> actual) {
List<Task> matchedTasksList = new ArrayList<Task>();
List<Task> differedTasksList = new ArrayList<Task>();
List<Task> copyOfSource = new ArrayList<>(source);
List<Task> copyOfActual = new ArrayList<>(actual);
for (Task o : actual) {
if (!copyOfSource.remove(o)) {
differedTasksList.add(o);
System.out.println("Task not present: " + o.toString());
return false;
} else {
matchedTasksList.add(o);
}
}
matchedTasksList.clear();
for (Task o : source) {
if (!copyOfActual.remove(o)) {
differedTasksList.add(o);
System.out.println("Task not present: " + o.toString());
return false;
} else {
matchedTasksList.add(o);
}
}
return (differedTasksList.size() == 0) ? true : false;
}
你寫道:「可以有重複以及ArrayList中。」這是否意味着一個ArrayList可以多次包含相同的任務?這些是相同的Task對象,還是具有相同數據的不同Task對象?另外,如果'source'包含一個任務兩次,'actual'包含一次,那麼這是否意味着'actual'是任務一次的「丟失」? – jason44107
這是一個具有相同數據的不同任務對象,而且實際上是缺少該任務一次。而且它也必須是雙向比較。 – user1234
使用HashSets代替的ArrayList(更有效的去除+重複的)和使用的方法retainAll和所述的removeAll接口https://docs.oracle.com/javase/7/docs/api/java/util/Set.html的 – toongeorges