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