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

时间:2015-03-05 10:08:53

标签: java android arraylist

我的应用从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);
        }

    }

但它永远不会说我的列表cointans元素。我做错了什么?

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

您应该在“事件”对象中覆盖equalshashCode 见: 有关hashCode

的详细信息,请Best implementation for hashCode method

答案 2 :(得分:0)

根据documentation关于ArrayList.contains

  

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

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

答案 3 :(得分:0)

if (list.contains(e))

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

或者你可以简单地使用LINQ with List而不是ArrayList C# how to determine, whether ArrayList contains object with certain attribute