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

import java.util.ArrayList; public class Test { public static void main (String[] args){ ArrayList a = new ArrayList(); 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,我无法检查它是否包含一个特定的String数组。 怎么办?为什么?

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

在上面,传递给contains方法的new String[]{"one", "abc"})将创建一个数组,该数组将与最初添加到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