簡體   English   中英

Java中具有最小時間復雜度的比較列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM