从评论开始,因为对评论的解释indexOf()可能太长了。其他回答者提供了很好的选择,但我会按照要求的方式回答。
我假设您正在使用List某种类型的 a(例如staffis 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()就应该为您完成其余的工作。