java - 在 Java 中比较具有最小时间复杂度的列表

标签 java algorithm arraylist

我有两个列表

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) 时间复杂度。

关于java - 在 Java 中比较具有最小时间复杂度的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32559620/

相关文章:

Java 2d Array 还是 2d ArrayList?

java - (Java) ArrayList<obj> 中 add(obj o) 方法的内部工作

java - 找到对集合 org.hibernate.HibernateException 的共享引用

java - Fortify 扫描问题 (XSS) 跨站点脚本反射 - 方法将未经验证的数据发送到网络浏览器

c - 如果条件为模,则逻辑条件失败?

javascript - 四舍五入的百分比加法闭合

java - contains() 方法不适用于 java 中的 Arrays.asList

java - 是否可以用特定类型的值初始化通用变量?

java - 在 java 中,您可以使用具有必填字段和可重新分配字段的构建器模式吗?

algorithm - 对超集进行分区并获取每个分区的原始集列表