【问题标题】:JAVA ArrayList : How to know whether it contains a String array or not?JAVA ArrayList:如何知道它是否包含字符串数组?
【发布时间】:2016-12-10 05:17:43
【问题描述】:
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);
            }
        }
    }

控制台说“假”。 我有一个 ArrayList,但无法检查它是否包含特定的 String 数组。 怎么做,为什么?

【问题讨论】:

    标签: java arrays arraylist


    【解决方案1】:

    contains 使用equals 方法实现检查对象是否相等。然而,对于数组,equals 等价于引用相等。 IE。 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 的 ArrayUtils.isEquals commons-lang

    【讨论】:

    • 那怎么办?将contains 更改为equals,结果仍然是“假”。我需要检查 ArrayList 是否“有”字符串数组
    • @JeanYang 更新了我的答案。同样,您不能在数组上调用 equals,因为它会检查引用相等性,而不是对象相等性。
    猜你喜欢
    • 2011-02-15
    • 2016-03-25
    • 2017-08-29
    • 2014-11-18
    • 1970-01-01
    • 2016-11-13
    • 2021-05-18
    • 1970-01-01
    相关资源
    最近更新 更多