[英]compare list with minimal time complexity in java
我有兩個清單
List<MyData> listA = new ArrayList<MyData>()
和List<MyData> listB = new ArrayList<MyData>()
都包含MyData
類型的對象,而MyData
包含這些變量。
Class MyData {
String name;
boolean val
}
我必須編寫一個程序來比較兩個arraylist是否相等,並且時間復雜度較小。我沒有在Mydata類中覆蓋equals和hashcode,因為它已經存在並且修改可能會影響應用程序的不同行為。 我寫的代碼是
forEach(MyData a:listA ){
forEach(MyData b:listB ){
if(a.getName.equals(b.getName)){
}
}
}
首先, forEach
不是有效的Java語法。 它應該是for
。
第二,您不希望有嵌套循環,因為那樣會給您O(n^2)
時間復雜度。
您應該有一個循環遍歷兩個列表的循環:
if (listA.size() != listB.size())
return false;
for (int i = 0; i < listA.size(); i++){
MyData a = listA.get(i);
MyData b = listB.get(i);
if (!a.getName.equals(b.getName))
return false;
}
return true;
那會給你O(n)
時間復雜度。
雙foreach循環會給您帶來O(n^2)
的復雜性……這不是最佳選擇。
您的清單排序了嗎? 如果是這樣,則可以一個接一個地進行比較(這是復雜度O(n)
),否則,請對它們進行排序! 最佳的通用排序算法的復雜度為O(n.log(n))
。 因此,總體而言,您將具有相同的復雜性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.