从评论开始,因为对评论的解释indexOf()
可能太长了。其他回答者提供了很好的选择,但我会按照要求的方式回答。
我假设您正在使用List
某种类型的 a(例如staff
is an ArrayList<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 != null
,o.equals(element)
返回真
或者如果不存在这样的元素,-1
则将返回。我假设您传递的员工是非空的,我将专注于那里的第二个选项。
o.equals(element)
是不言自明的。但是,有一些事情需要注意:如果Employee
类没有覆盖equals()
,您可能不会得到您想要的行为。这是因为equals()
检查引用相等性的默认实现(您要比较的两个引用指向同一个底层对象,类似于我在 C++ 中猜测的两个指针指向同一个位置/对象),而不是对象相等(“正常”相等,如果两个对象“代表同一事物”,则它们相等,即使它们是不同的对象)。
因此,在您的情况下,如果您想通过 ID 号匹配员工,您需要编写一个equals()
接受 Object 的方法,检查它Employee
是否是 ,如果是,是否传递对象的员工 ID与您要拜访的员工相符equals()
。当然,如果这样的equals()
方法已经存在,那么你不必做任何事情。如果equals()
已经被覆盖并且有一些不同的行为,那么你可能不走运......
另外,请注意您使用的方法签名是equals(Object o)
,而不是 equals(Employee e)
。这是两个不同的方法签名,只有第一个会覆盖Object#equals()
.
一旦您equals()
编写了正确的方法,indexOf()
就应该为您完成其余的工作。