[英]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;
}
您應該在事件對象中覆蓋equals
和hashCode
。
有關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.