簡體   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