2013-01-11 33 views
0

我想比較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); 

     } 





    } 
+1

使用'String.equals()'方法比較字符串 – Smit

+0

問題在哪裏? – Smit

+1

問題是,它會檢查元素0對1然後2等,但之後它將檢查元素1對0然後1等等,它不應該比較相同的元素兩次。 –

回答

0

使用

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

,而不是Morover開始你的j = i+1初始化您已經檢查了這些以前的字符串所以沒有必要再次啓動它。

編輯

你必須限制你的外循環,以i<a.size()-1所以它不會與自身檢查非常最後一個元素。

我希望這會有所幫助。如果你需要更多的幫助只是問。

+0

謝謝,另一個問題是,每一個元素只有在我能夠實現這個目標的任何想法時才能被檢查?例如,如果該數組的內容物 a.add( 「G1」); // 0 \t \t a.add( 「G2」); // 1個 \t \t a.add( 「G3」); (「G1」); // 2 \t \t a。加( 「G2」); // 4 \t \t a.add( 「G2」); // 5 \t \t a.add( 「G3」); // 6 \t \t \t \t \t } –

+0

@SandeepJohal我更新了答案。你提到的問題已經在其他人的回答中提到。 – Smit

+0

@SandeepJohal我想我誤解了你的問題。我沒有得到它。你可以在你的問題中進行編輯,當你這樣做的時候讓我知道。 – Smit

1

==是引用相等(例如做這兩個對象指向相同的位置在存儲器中)。對於對象平等,請改爲使用.equals()。的

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

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

    } 

希望幫助.. :)

+1

真的!!!!你用'=='來比較字符串? – Smit

+0

此外,每個循環將在內部循環中以a.size() - 1結束1短。 a.size() - 1在外部循環中是可以接受的,所以當只有一個條目與之比較時,它不會在最後一次跳過一個額外的時間。 – nhydock

+1

哦,我的壞... 替換==用.equals和我循環應該結束在a.size() - 1不是j循環。 –

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 [1]與[J],結果將是相同的,如果你做了研究[J]等於[I],那麼你可以跳過他們。當j和i相同時,這也可以使您免於檢查[i]等於a [j]。

相關問題