将一个ArrayList与其自身进行比较

3
如果我有一个包含A、B、C的ArrayList(为简单起见),我想将这些值相互比较,但不与自身比较,也不重复比较同一对值...那我该怎么做呢?
目前我有以下代码:
for(Double db : arrayList)
{
    for(Double db2 : arrayList)
    {
        if(db2 != db)
        {
            //compare
        }
    }
}

但这并不能排除首先将A与B进行比较,然后稍后再将B与A进行比较的情况... 有什么想法吗?提前感谢。
2个回答

7

看起来你可能只想按照索引值进行操作:

for (int i = 0; i < arrayList.size() - 1; i++) {
    Double db = arrayList.get(i);
    for (int j = i + 1; j < arrayList.size(); j++) {
        Double db2 = arrayList.get(j);

        // Don't use == unless you *really* want reference identity
        if (!db2.equals(db)) {
            ...
        }
    }
}

2
使用 subList(int fromIndex, int toIndex) 方法:
List<Double> arrayList = ...;
int length = arrayList.size();

for(int i = 0; i < length - 1; i++)
{
    Double db1 = arrayList.get(i);
    for(Double db2 : arrayList.subList(i + 1, length))
    {
        // ...
    }
}

请注意,您可以将 i 的边界减少一个,因为最后一个元素不会有任何要进行比较的对象。(子列表将为空。) - Jon Skeet
@JonSkeet 不是 arrayList.subList(length, length) 会返回一个空列表,因此它不会进入内循环吗? - Eng.Fouad
是的,但我的观点是你知道它会这样做 - 那么为什么要进入外部循环,获取最后一个元素,然后创建空子列表(视图)呢? - Jon Skeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接