2013-04-03 428 views
-1

我想在第ArrayList中使用包含方法,其中存儲了Employee類的對象。但是,當我用這個方法,它總是返回false即使我實現了在Employee類的equals方法在ArrayList中使用包含方法

這是我的嘗試:

Employee類

public class Employee { 
    . 
    . 
    . 
@Override 
public boolean equals(Object o){ 

    if(o instanceof Employee) 
    { 
    Employee e = (Employee) o; 
    return this.id==(e.id); 
    } 
    return false; 
} 

    @Override 
    public int hashCode() { 
     int hash = 7; 
     hash = 79 * hash + (int) (this.id^(this.id >>> 32)); 

     return hash; 
    } 

測試類

public class Test { 


LinkedList <Employee>list=new LinkedList <Employee>(); 
Employee e=new Employee(); 
long id=0; 

    e.setId(20710456); 
    list.add(e); 

     e.setId(30560432); 
    list.add(e); 


public void Edit() 
{  
     id=Integer.parseInt(JOptionPane.showInputDialog(null,"Enter the id of the 
      employee")); 

      e.setId(id); 

      System.out.print(list.contains(e.getId())); 

    if(list.contains(e.getId())){ 
       . 
       . 
       //rest of the code 

      } 
    } 
} 
+0

請給一個簡短而*完整*例子,最好有更好的壓痕。我們不知道你的ID是什麼,你的代碼永遠不會給列表添加任何東西...... – 2013-04-03 21:03:08

+0

@JonSkeet,該列表包含ida,但我沒有提到爲快點:eidted – 2013-04-03 21:11:57

+1

將來,請花點時間問一個問題,確保你已經包含了所有相關的*和*儘可能好的內容。閱讀http://tinyurl.com/so-list – 2013-04-03 21:14:10

回答

7

你叫list.contains(e.getId()),但該列表不包含ID號 - 它包含Employee s。我懷疑你的意思是list.contains(e)

+0

當我使用這個語句:「list.contains(e)」 ,它總是返回true – 2013-04-03 21:13:51

+1

這是因爲一個單獨的問題:當你調用list.add(e)',你添加一個_reference_到'e',你沒有添加'e'的副本。您必須爲要添加到列表中的每位員工創建一個新的「員工」對象,並且在執行「包含」檢查時還必須創建一個新的「員工」。 – 2013-04-03 21:18:27

+1

@Calm Sea '員工e =新員工(); e.setId(20710456); list.add(e); e.setId(30560432); list.add(e);' 這部分代碼創建一個** single **'Employee'對象,設置它的'id'並將其添加到列表中。然後你改變這個對象的'id'和**再次將它添加到列表**。你的列表現在有兩個元素引用**同一個對象**。 – 2013-04-03 21:41:27

0

你應該調用list.contains(e)。該列表包含不是員工ID的員工。

0

您的名單只是循環做一個比較

例如爲:

for (Employee em: list){ 
    if(em.getId()=e.getId()){ 
//your logic 
    } 
} 
+0

謝謝,但如果可能的話,我想使用「contains」方法 – 2013-04-03 21:15:45