从ArrayList <CustomObject>中查找项目索引的更好方法

Sco*_*ion 11 java search arraylist indexof

首先,如果我错了,请纠正我.我想在ArrayList<CustomType>不使用For循环的情况下找到Item的索引(即字符串值).

POJO:

id;
name;
Run Code Online (Sandbox Code Playgroud)

码:

ArrayList<POJO> list = new ArrayList<POJO>;

//Lots of data added to these list...
Run Code Online (Sandbox Code Playgroud)

现在我想从arraylist中找到特定名称的id而不使用下面的for循环.

String id = null;
// TODO Auto-generated method stub
for (int i = 0; i < list.size(); i++) {
    if("ABCD".equalsIgnoreCase(list.get(i).getName())) {
        id = list.get(i).getId();
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我不想实现For循环,因为在某些情况下,我在List中有500多个数据,并且使用For循环查找索引不是一个好方法.

Dan*_* D. 12

你可以使用list.indexOf(),但为了使它工作,你需要覆盖equalshasCode你的POJO.

默认情况下,如果两个对象具有相同的引用,则它们将被视为相等.您可以覆盖equals以适用于您的案例:

public boolean equals(Object o) {
  if (!(o instanceof POJO)) {
    return false;
  }
  POJO other = (POJO) o;
  return name.equalsIgnoreCase(other.getName());
}
Run Code Online (Sandbox Code Playgroud)

覆盖等于建议你覆盖hashCode.例如:

public int hashCode() {
  return name.hashCode();
}
Run Code Online (Sandbox Code Playgroud)


Sco*_*ion 3

感谢大家的友好和快速的回​​复。但要特别感谢Joachim Sauer。你说得对,500 个元素并不是很多,很可能这个循环对代码的性能没有真正的影响(即使它效率低下)。即使我尝试了 5000 个元素,仍然没有对性能产生负面影响。

再次感谢大家,并感谢Joachim Sauer 的评论。