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数组。 怎么办?为什么?
答案 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
。