2013-04-03 261 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