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