将每个项目与 ArrayList 中的每个其他项目进行比较

新手上路,请多包涵

我遇到了我认为应该是一个非常简单的问题。

我需要将 arrayList 中的每个项目与列表中的每个其他项目进行比较,而不是将项目与它们自己进行比较。它不像调用 equals() 比较那么简单,它涉及我在下面的代码中省略的一些自定义逻辑。此外,不应以任何方式更改 ArrayList。

我似乎遇到的问题是,一旦我进入第二个循环,我不知道我是否有另一个对象可以与之比较(因为它是一个可变大小的列表)。

 for(int i =0; i< list.size(); i++){
    //get first object to compare to
    String a = list.get(i).getA();

    Iterator itr = list.listIterator(i + 1 ); // I don't know if i + 1 is valid
    while(itr.hasNext()){
        // compare A to all remaining items on list
    }
}

我想我可能以错误的方式解决这个问题,我愿意接受有关如何更好地做到这一点的建议或提示。

原文由 JavaKungFu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 365
2 个回答
for (int i = 0; i < list.size(); i++) {
  for (int j = i+1; j < list.size(); j++) {
    // compare list.get(i) and list.get(j)
  }
}

原文由 Kaleb Brasee 发布,翻译遵循 CC BY-SA 2.5 许可协议

这段代码帮助我得到了这个行为:有了列表 a、b、c,我应该比较 ab、ac 和 bc,但任何其他对都是多余的/不需要的。

 import java.util.*;
import static java.lang.System.out;

// rl = rawList; lr = listReversed
ArrayList<String> rl = new ArrayList<String>();
ArrayList<String> lr = new ArrayList<String>();
rl.add("a");
rl.add("b");
rl.add("c");
rl.add("d");
rl.add("e");
rl.add("f");

lr.addAll(rl);
Collections.reverse(lr);

for (String itemA : rl) {
    lr.remove(lr.size()-1);
        for (String itemZ : lr) {
        System.out.println(itemA + itemZ);
    }
}

循环如下图所示: Triangular comparison visual example

或者像这样:

    |   f    e    d    c    b   a
   ------------------------------
a  |  af   ae   ad   ac   ab   ·
b  |  bf   be   bd   bc   ·
c  |  cf   ce   cd   ·
d  |  df   de   ·
e  |  ef   ·
f  |  ·

总比较数是一个三角数 (n * n-1)/2

原文由 BrnLng 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题