JAVA ArrayList:如何知道它是否包含String数组?

时间:2014-09-27 11:34:18

标签: java arrays arraylist

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

控制台说&#34; false。&#34; 我有一个ArrayList,我无法检查它是否包含特定的String数组。 怎么办?为什么?

1 个答案:

答案 0 :(得分:2)

contains使用equals方法实现检查对象相等性。但是,对于数组,equals等同于引用相等。即array1.equals(array2)转换为array1 == array2

在上文中,传递给new String[]{"one", "abc"})方法的contains将创建一个 new 数组,该数组与最初添加到ArrayList的数组不同

进行检查的一种方法是循环遍历ArrayList中的每个数组,并使用Arrays.equals(array1, array2)检查相等性:

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

另一种方法是使用Apache commons-lang中的ArrayUtils.isEquals