繁体   English   中英

检查ArrayList <>是否包含一个对象不起作用

[英]Checking if ArrayList<> cointains a object dont work

我的应用程序从sqldatabase下载事件,并将其添加到ArrayList <>。 它确实重复,所以我写道:

public static ArrayList<Events> list = new ArrayList<Events>();

  static void addevhlp(Events e){

        if (list.contains(e)){
         Log.d("","it cointains")
        }
        else {
            list.add(e);
        }

    }

但是,它从来没有说过列表上的cotantans元素。 我做错了什么?

您必须在Events override equals ,并定义两个事件何时相等。 默认实现检查相等对象的引用。 例如,如果您的Events类具有一个int id字段

@Override
public boolean equals(Object o) {
    if (!(o instanceof Events)) {
         return false;
    }
    Events event = (Events) o;
    return id == event.id;
}

您应该在事件对象中覆盖equalshashCode
有关hashCode的详细信息,请参见: hashCode方法的最佳实现

根据有关ArrayList.contains文档

如果此列表包含指定的元素,则返回true。 更正式地讲,当且仅当此列表包含至少一个元素(e == null?e == null:o.equals(e))时,返回true。

因此, contains使用您的Events类的equals实现检查其是否包含对象。

if (list.contains(e))

如果事件e的引用与您在ArrayList中的引用具有相同的引用,则包含将起作用。 但是,如果要检查值是否相同,但引用不同,则必须检查事件的属性是否存在或相等。

或者您可以简单地使用带有列表的LINQ而不是ArrayList C#如何确定ArrayList是否包含具有特定属性的对象

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM