繁体   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