我遇到的问题应该是一个非常简单的问题。
我需要将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
}
}
我想我可能会以错误的方式解决这个问题,我愿意接受有关如何做得更好的建议或提示。
答案 0 :(得分:35)
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)
}
}
答案 1 :(得分:2)
在内部使用for
循环有什么问题?就像在外面一样?
for (int j = i + 1; j < list.size(); ++j) {
...
}
通常,从Java 5开始,我只使用了一次或两次迭代器。
答案 2 :(得分:1)
在某些情况下,这是最好的方法,因为你的代码可能会改变一些东西而j = i + 1不会检查它。
for (int i = 0; i < list.size(); i++{
for (int j = 0; j < list.size(); j++) {
if(i == j) {
continue;
}
}
答案 3 :(得分:0)
以下代码将使用contains()方法将每个项目与其他项目列表进行比较.for循环的长度必须是较大列表的较大size(),然后才会比较两个列表的所有值。
List<String> str = new ArrayList<String>();
str.add("first");
str.add("second");
str.add("third");
List<String> str1 = new ArrayList<String>();
str1.add("first");
str1.add("second");
str1.add("third1");
for (int i = 0; i<str1.size(); i++)
{
System.out.println(str.contains(str1.get(i)));
}
输出为真 真正 假
答案 4 :(得分:0)
这段代码帮助我解决了这个问题:使用列表a,b,c,我应该比较ab,ac和bc,但是任何其他对都会超出/不需要。
b
循环如下图所示: Triangular comparison visual example
或者这样:
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);
}
}
总比较是三角数(n * n-1)/ 2
答案 5 :(得分:0)
你可以这样做。
for (int i = 0; i < arrayList.size(); i++) {
for (int j = 0; j < arrayList.size(); j++) {
if (i!=j && arrayList.get(i).YourObjectItem().equals(arrayList.get(j).YourObjectItem())) {
//Your code will be here
}
}
}