2014-09-27 74 views
3
import java.util.ArrayList;  
public class Test { 
     public static void main (String[] args){ 
      ArrayList<String[]> a = new ArrayList<String[]>(); 
      a.add(new String[]{"one", "abc"}); 
      a.add(new String[]{"two", "def"}); 
      if(a.contains(new String[]{"one", "abc"})){ 
       System.out.println(true); 
      }else{ 
       System.out.println(false); 
      } 
     } 
    } 

控制檯說「錯誤」。 我有一個ArrayList,我無法檢查它是否包含特定的字符串數組。 如何做,爲什麼?JAVA ArrayList:如何知道它是否包含一個字符串數組?

回答

2

contains使用equals方法實現來檢查對象相等性。但是,對於數組,equals等同於引用相等。即array1.equals(array2)轉換爲array1 == array2

在上文中,傳遞給contains方法將創建一個新陣列,這將是比最初加入到ArrayList所述一個不同的new String[]{"one", "abc"})。做檢查

的一種方法是循環遍歷所述ArrayList每個陣列,並檢查使用Arrays.equals(array1, array2)平等:

for(String[] arr : a) { 
     if(Arrays.equals(arr, new String[]{"one", "abc"})) { 
      System.out.println(true); 
      break; 
     } 
} 

的另一種方法是使用從ArrayUtils.isEquals阿帕奇commons-lang

+0

那麼該怎麼辦?將'contains'改爲'equals',結果仍然是「false」。我需要檢查ArrayList是否有「字符串數組」 – Erwai 2014-09-27 11:41:35

+0

@JeanYang更新了我的答案。再次,你不能在數組上調用equals,因爲它檢查引用的相等性,而不是對象的相等性。 – manouti 2014-09-27 11:45:34

+0

謝謝!問題已經解決了! – Erwai 2014-09-27 11:57:32

相關問題