【问题标题】:Java ArrayList of Arrays, contains doesn't work数组的Java ArrayList,包含不起作用
【发布时间】:2013-10-08 01:14:09
【问题描述】:

我有一个数组列表:

List<MyObj[]> list = new ArrayList<MyObj[]>();

我在里面放了数组:

MyObj[] test = new MyObj[2];
test[0] = new MyObj();
test[1] = new MyObj();
list.add(test);

我检查测试是否包含在列表中:

if(list.contains(test)){
    System.out.println("You are smart");
}else{
    System.out.println("I are not smart");
}

>I are not smart

我在这里做错了什么?

【问题讨论】:

  • list.add(test);if(list.contains(test)){ 之间有什么关系吗?
  • 你在 MyObject 类中实现了 .equals 方法吗?
  • 这对我来说有点奇怪,你在另一个类似数组的人中持有数组,你想达到什么目的?
  • equals of MyObj 永远不会被调用。 equals 的数组进行身份比较。
  • 制作真正的SSCCE 的重要步骤之一是编译和运行您打算发布的代码,并确保它展示了您面临的相同问题。这段代码没有这样做。

标签: java arrays arraylist contains


【解决方案1】:

由于你隐瞒了一些事情,我无法给出肯定的答案,但你可以试试

public static boolean contains(ArrayList<MyObj[]> list, MyObj[] element) {
    for (MyObj[] e: list) {
        if (Arrays.equals(e, element)) return true;
    }
    return false;
}

【讨论】:

    【解决方案2】:

    两件事之一,你需要更新你的 jre,或者你正在改变数组。

    这很好用:

    public class Main {
        public static void main(String[] args) {
            List<MyObj[]> list = new ArrayList<MyObj[]>();
    
            MyObj[] test = new MyObj[2];
    
            test[0] = new MyObj();
            test[1] = new MyObj();
            list.add(test);
    
            if(list.contains(test)){
                System.out.println("is true");
            }else{
                System.out.println("Is  not true");
            }
    
        }
    }
    class MyObj {
        public MyObj() {
    
        }
        public String x;
    
    }
    

    输出:

    is true
    

    【讨论】:

    • 这个答案与我刚刚删除的答案有什么不同?
    • @Heuster 如果您看不出区别,您删除的那个可能也是一个很好的答案。
    • @Heuster Pete Belford 确实回答了这个问题(您需要更新您的 jre,或者您正在改变数组),然后通过以下方式证明了这种情况表明发布的代码确实可以正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 2012-11-14
    • 2015-09-20
    • 1970-01-01
    相关资源
    最近更新 更多