0

我正在尝试将 arraylist 中的第一个元素与其余元素进行比较。

然后将 arraylist 的第二个元素与其余元素进行比较,依此类推,直到
arraylist 结束。

代码如下:

ArrayList<String> a = new ArrayList<String>();

    a.add("G1");
    a.add("G2");
    a.add("G3");
    a.add("G1");

    System.out.println(a.size());

    for(int i = 0; i<a.size(); i++){

        for(int j = 0; j<a.size(); j++){

        if(a.get(i) == a.get(j))
            System.out.println("Element: " + a.get(i)+ " at " + i + " and " + "Element: "+ a.get(j)+ " at " + j);

        }





    }
4

4 回答 4

1

==是引用相等(例如这两个对象是否指向内存中的相同位置)。对于对象相等,请.equals()改用。

于 2013-01-11T05:27:17.533 回答
1

使用此代码,而不是您的代码。

for(int i = 0; i<a.size()-1; i++){

    for(int j = i+1; j<a.size(); j++){

    if(a.get(i).equals(a.get(j)))
        System.out.println("Element: " + a.get(i)+ " at " + i + " and " + "Element: "+ a.get(j)+ " at " + j);

    }

希望有帮助.. :)

于 2013-01-11T05:44:54.617 回答
0

采用

 if((a.get(i)).equals(a.get(j)))

代替

 if(a.get(i) == a.get(j))

Morover 开始你的初始化j = i+1你已经检查了这些先前的字符串,所以不需要再次启动它。

编辑

你必须限制你的外部循环,i<a.size()-1以便它不会检查最后一个元素。

我希望这有帮助。如果您需要更多帮助,请询问。

于 2013-01-11T05:30:21.947 回答
0

在您的情况下,由于您使用的是字符串,而不是使用 ==,它是引用相等,因为内存地址相同,您想要使用.equals()它将通过两个字符串的实际值进行比较。

至于你的 for 循环,你可以通过这样做稍微提高效率。

for (int i = 0; i < a.size()-1; i++)
{
    for (int j = i+1; j < a.size(); j++)
    {
        if(a.get(i).equals(a.get(j)))
        {
            System.out.println("Element: " + a.get(i)+ " at " + i + " and " + "Element: "+ a.get(j)+ " at " + j);
        }

    }
}

由于有时您已经将 a[i] 与 a[j] 进行比较,因此如果您执行 a[j] 等于 a[i],结果将是相同的,因此您可以跳过它们。当 j 和 i 相同时,这也使您不必检查 a[i] 是否等于 a[j]。

于 2013-01-11T05:51:14.427 回答