2014-09-27 126 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

相关问题