JAVA ArrayList:如何知道它是否包含一个字符串数组?

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

控制台显示“false”。 我有一个ArrayList,我无法检查它是否包含特定的字符串数组。 如何做到并解释原因?

1个回答

2

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


那么怎么办呢?将“contains”更改为“equals”,结果仍然是“false”。我需要检查ArrayList是否“有”String Array。 - Jean Y.C. Yang
@JeanYang 更新了我的答案。再次提醒,你不能在数组上调用 equals 方法,因为它检查的是引用相等性,而不是对象相等性。 - M A

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接