2016-03-29 129 views
1
  • 我做了這樣的事情:比較兩個數組列表元素,並得到聯合國共同元素

    public class MainActivity extends AppCompatActivity { 
    
        ArrayList<String> al = new ArrayList<String>(); 
        ArrayList<String> a2 = new ArrayList<String>(); 
    
    
        @Override 
        protected void onCreate(Bundle savedInstanceState) { 
         super.onCreate(savedInstanceState); 
         setContentView(R.layout.activity_main); 
    
    
         al.add("C"); 
         al.add("A"); 
         al.add("E"); 
         al.add("B"); 
         al.add("D"); 
         al.add("F"); 
    
         a2.add("C"); 
         a2.add("C"); 
         a2.add("E"); 
         a2.add("B"); 
         a2.add("D"); 
         a2.add("F"); 
    
    
         for (int i = 0; i < al.size(); i++) { 
          for (int j = 0; j < a2.size(); j++) { 
    
           if (al.get(i).equals(a2.get(j))) { 
            a2.remove(j); 
            Log.e("array 2 ", a2.toString()); 
            break; 
           } 
    
          } 
         } 
        } 
        } 
    

- 但我的輸出是這樣的:

[C, E, B, D, F] 
[C, B, D, F] 
[C, D, F] 
[C, F] 
[C] 

- 我在arraylist 2中有相同的元素,那麼我也得到'C',它應該是null .ie零不常見的值。

+2

'al.removeAll(A2)'刪除al'和'a2'之間'常見的物品。閱讀更多[here](https://docs.oracle.com/javase/7/docs/api/java/util/Collection.html#removeAll(java.util.Collection)) – Blackbelt

回答

0

只需更換break;本:

j = -1; 

代碼:

for (int i = 0; i < al.size(); i++) { 
     for (int j = 0; j < a2.size(); j++) { 

      if (al.get(i).equals(a2.get(j))) { 
       a2.remove(j); 
       Log.e("array 2 ", a2.toString()); 
       j = -1; 

      } 

     } 
    } 
1

嘗試這個它會幫助你

 ArrayList<String> al = new ArrayList<String>(); 
    ArrayList<String> a2 = new ArrayList<String>(); 

    al.add("C"); 
    al.add("A"); 
    al.add("E"); 
    al.add("B"); 
    al.add("D"); 
    al.add("F"); 

    a2.add("C"); 
    a2.add("C"); 
    a2.add("E"); 
    a2.add("B"); 
    a2.add("D"); 
    a2.add("F"); 

    Integer a = null; 
for (int i=0; i<a1.size(); i++) 
    { 
    a = a1.get(i); 

    if (a2.contains(a) 
{ 
    a2.remove(a); 
    a1.remove(a); 
    i--; 
} 
} 

ArrayList<String> finaldata = new ArrayList<String>(); 
finaldata.addAll(a1); 
finaldata.addAll(a2); 
// finaldata = { A} 
+0

根本不起作用 – Risk

+0

final is keyword在'Java'中 –

1

您與當您刪除A2項目直接在for循環中的索引搞亂。請參閱我的解決方案如下

 ArrayList<String> al = new ArrayList<>(); 
     ArrayList<String> a2 = new ArrayList<>(); 
     al.add("C"); 
     al.add("A"); 
     al.add("E"); 
     al.add("B"); 
     al.add("D"); 
     al.add("F"); 

     a2.add("C"); 
     a2.add("C"); 
     a2.add("E"); 
     a2.add("B"); 
     a2.add("D"); 
     a2.add("F"); 

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

     for (int i = 0; i < al.size(); i++) { 
      for (int j = 0; j < a2.size(); j++) { 
       if (al.get(i).equals(a2.get(j))) { 
        tempToDelete.add(a2.get(j)); 
        break; 
       } 

      } 
     } 

     a2.removeAll(tempToDelete); 

較短的方法,你可以這樣做:

a2.removeAll(al);