java - 从 ArrayList 调用所有组合方法的最有效方法?

标签 java arraylist

我有一个项目数组列表,每个项目都有一个将任何其他项目作为参数的方法。确保我对每对可能的项目调用该方法而不重复它们的最有效方法是什么? (可以假定所有项目都是唯一的)。

我的代码:

public boolean hasConflict (ArrayList<Item> items) {
    // For every possible pair of items...
        one = items.get(i);
        two = items.get(j);

        if ( one.conflictsWith (two)) {
            return true;
        }

    // If we reach the end of the list without finding a conflict
    return false;
}

编辑:

one.conflictsWith (two) 将返回与 two.conflictsWith (one) 相同的值,很抱歉忘记了这一点。

conflictsWith 方法不比较以查看两个值是否重复,因此不幸的是我无法使用哈希表来对其进行排序。

最佳答案

很简单,如果您不需要调用 a.conflictsWith(b) 以及 b.conflictsWith(a),您可以通过以下方式节省一些时间:

for(int i = 0; i < list.size(); ++i) {
    final MyClass curr = list.get(i);
    for(int j = i + 1; j < list.size(); ++j) {
        curr.conflictsWith(list.get(j));
    }
}

即遍历 List,然后在第二个循环中,遍历 List剩余部分

否则你需要遍历所有

for(int i = 0; i < list.size(); ++i) {
    final MyClass curr = list.get(i);
    for(int j = 0; j < list.size(); ++j) {
        if(i != j) {
            curr.conflictsWith(list.get(j));
        }           
    }
}

关于java - 从 ArrayList 调用所有组合方法的最有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19364406/

相关文章:

java - 如何将 2 个元素放入数组的一行中?

Java比较两个List的对象值?

java匿名内部类无法访问的代码

java - 通过另一个 arraylist 对象的方法将字符串添加到 arraylist

java - URLConnection getContentLength() 返回负值

java.nio.file 无法复制文件

java - 我在 java 中的构造函数有什么问题?

java - 根据所包含对象的属性值从 ArrayList 中过滤唯一对象

java - 如何遍历数据库中employeeID列中的所有行并一次检索一个小时工资率?

java - 这段线程代码的错误在哪里?