2013-08-07 36 views
1

指數我想以檢索名單的特定元素的索引:如何返回的ArrayList中<Field>

ArrayList<Field> list = new ArrayList<Field>(); 
    list.addAll(profile.getFieldsList()); 

    Object privacyName = "privacy"; 
    int i = list.indexOf(privacyName); 
    boolean doesContain = list.contains(privacyName); 

沒有在列表中包含「隱私」一個領域,但我始終是-1和doesContain總是假。爲什麼這個搜索不起作用?

+1

您的列表包含「Field」類型的元素,它的值不能爲「privacy」。你有一些'Field'的財產,你有這個價值嗎? –

+0

我認爲這是您使用的對象的原因,而不是歸檔? –

回答

1
public int indexOf(Object o) { 
     if (o == null) { 
      for (int i = 0; i < size; i++) 
       if (elementData[i]==null) 
        return i; 
     } else { 
      for (int i = 0; i < size; i++) 
       if (o.equals(elementData[i])) 
        return i; 
     } 
     return -1; 
    } 

您需要覆蓋等於邏輯相等或依賴默認參考相等。

在這種情況下,privacyName.equals(elementData[i])總是錯誤的。

3

爲什麼這個搜索不起作用?

因爲list包含Field類的實例,你所呼叫的contains方法傳遞String實例。

要使其工作,您需要傳遞Field類的實例。

+0

那麼我如何才能做到這一點'場'類型? –

+3

問題是他正在傳遞'String'的實例,它不可能是'Field'。 –

+0

+1你更快:),+1給@Brian – Tala

1

From the Java docs for indexOf:

返回指定元件的第一次出現的索引在此列表中,或-1,如果該列表中不包含的元素。

因此,您的列表中不包含對象privacyName;

1

在ArrayList方法的索引將基於equals方法。在字段類overide equals和Object類的hasCode方法中。並且您告訴「在列表中有一個包含」隱私「的字段」。 IndexOf數組將基於equals方法。作爲@ rocketboy的答案,你需要正確地覆蓋equals和hasCode方法。 Why do I need to override the equals and hashCode methods in Java?

相關問題