使用Java中的indexOf()查找Object arrayList的索引值

时间:2014-05-10 20:37:59

标签: java arrays oop indexof compareobject

  

此方法扫描当前员工Employee数组以查看是否   任何员工和员工之间都有匹配   传入。

     

如果没有匹配则返回-1,以及Employee的索引号   如果有匹配。

现在我的问题是,我该如何使用 -

  

的indexOf();

正确获取对象的 索引值 的方法,然后是empId与传入的员工匹配的员工

public int findEmployee(Employee emp) {
    int index = -1;
    for (Employee s : staff) {
        if (emp.getEmpId() == s.getEmpId()) {
            index = indexOf(); //how to use this
        }
    }

    return index;
}

我对任何其他比较方式持开放态度,因为我知道 indexOf() 可以搜索并找到 empId < / em>对我来说。因此,如果我必须取消 if语句,我不介意。我认为它会使代码更有效。

2 个答案:

答案 0 :(得分:1)

来自评论,因为对indexOf()的解释可能对评论来说太长。其他回答者提供了很好的选择,但我会回答所要求的方式。

我假设您正在处理某种List(例如staffArrayList<Employee>),因为Arrays实用程序类没有出现拥有indexOf()方法。

不幸的是,我没有C ++经验,所以我不确定Java中的哪些概念可以很好地映射到C ++。如果您有任何疑问,请随时提出。

ArrayList#indexOf(Object o)状态的javadoc:

  

返回此列表中第一次出现的指定元素的索引,如果此列表不包含该元素,则返回-1。更正式地,返回最低索引i,使(o==null ? get(i)==null : o.equals(get(i)))或-1,如果没有这样的索引。

有趣的部分是:

  

返回最低索引i,使(o==null ? get(i)==null : o.equals(get(i)))

基本上,indexOf()将要做的是遍历列表,直到它找到一个元素:

  • 如果o == null,则该元素也为空
  • 如果o != nullo.equals(element)返回true

或者,如果不存在此类元素,则将返回-1。我假设你传入的员工是非空的,我会专注于那里的第二个选项。

o.equals(element)非常明显。但是,有一点需要注意:如果Employee类没有覆盖equals(),您可能无法获得所需的行为。这是因为equals()的默认实现检查引用相等(其中您要比较的两个引用指向相同的底层对象,类似于我在C ++中猜测的是两个指向同一位置/对象的指针,而不是对象相等(“正常”等于,如果它们“代表相同的东西”,则两个对象相等,即使它们是不同的对象)。 / p>

所以看起来在你的情况下,如果你想按ID号匹配Employees,你需要编写一个接收Object的equals()方法,检查它是否是{{1}如果是,则传递的对象的员工ID与您正在调用Employee的员工的ID相匹配。当然,如果已经存在这样的equals()方法,那么您不必做任何事情。如果equals()已经被覆盖并且有一些不同的行为,那么你可能会运气不好......

另外,请注意您使用的方法签名是equals(),而不是 equals(Object o)。这是两种不同的方法签名,只有第一种方法会覆盖equals(Employee e)

一旦您编写了正确的Object#equals()方法,equals()就应该为您完成剩余的工作。

答案 1 :(得分:0)

如果每个Employee都有自己唯一的id,那么你需要在Employee对象中实现equals()方法,如果id相等则返回true,例如:

@Override    
public boolean equals(Object object) {
    return (object instanceof Employee) && (id != null) 
         ? id.equals(((Employee) object).id) //change ".equals" to "=" if you use int instead of Integer, which I believe you apparently do.
         : (object == this);
}