我的应用从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元素。我做错了什么?
答案 0 :(得分:3)
您必须在override
中equals
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)
您应该在“事件”对象中覆盖equals
和hashCode
见:
有关hashCode
答案 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