如何使用for-each循环比较ArrayList中的项目对?

the*_*man 5 java for-loop

我有一个对象向量,我需要逐个比较它们.那是:

for (Object o1 : list) {
    for (Object o2 : list) {
    //Do something with o1 and o2
    }
}
Run Code Online (Sandbox Code Playgroud)

无论如何使用这种方法我会比较任何两次!使用"C"风格的方法,我会这样做:

for (i=0; i<n-1; i++) {
    for (j=i+1; j<n; j++) {
    //Do something with list[i] and list[j]
    }
}
Run Code Online (Sandbox Code Playgroud)

其中n是列表的长度.

有没有办法使用for-each循环?

加成

for-each循环的使用不是强制性的.无论如何,我关心的是表演问题.for-each循环是否比直接访问索引的简单快?

rge*_*man 6

明确清楚你对C-for for循环的意图是什么 - 在每一对上完全循环一次,这样与反向成员相同的对,例如(a,b)和(b,a)不再被处理.这就是我建议的; 它也适用于Java.

但是,如果你绝对必须有增强的for循环,你可以有循环工作在子列表,与内部List的subList方法,从下一个元素.

for (Object o1 : list) {
    List<Object> subList = list.subList(list.indexOf(o1) + 1, list.size());
    for (Object o2 : subList) {
         //Do something with o1 and o2
    }
}
Run Code Online (Sandbox Code Playgroud)