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
。