簡體   English   中英

如何使用arraylist進行排列

[英]How to conduct permutation using an arraylist

我試圖將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);

        }





    }

==是引用相等(例如,這兩個對象指向內存中的相同位置)。 對於對象相等,請改用.equals()

使用此代碼而不是您的代碼。

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);

    }

希望有幫助.. :)

采用

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

代替

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

Morover開始初始化j = i+1您已經檢查了這些前一個字符串,因此無需再次啟動它。

編輯

你必須將你的外部循環限制為i<a.size()-1這樣它就不會檢查最后一個元素。

我希望這有幫助。 如果您需要幫助,請問。

在你的情況下,因為你正在使用字符串,而不是使用= =,這是引用相等,因為內存地址相同,你想使用.equals() ,它將比較兩個字符串的實際值。

至於你的for-loop,你可以通過這樣做來提高效率。

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);
        }

    }
}

由於有時您已經將[i]與[j]進行比較,如果您執行[j]等於[i],結果將是相同的,因此您可以跳過它們。 當j和i相同時,這也可以避免檢查[i]等於a [j]。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM