1

如何在列表中搜索?有没有内置功能?

public void searchEmployee(int empId) {
    Iterator<Employee> iterator = list1.iterator();
    while (iterator.hasNext()) {
        if (iterator.next().getEmpid() == empId) {
            System.out.println("the searched employee is ::");
            iterator.remove();
        }
    }

}
4

6 回答 6

1

列表有.contains(Object o).remove(Object o)
所以更好的方法是

public void removeEmployee(Employee e) {
   if (listEmplyees.contains(e)) {
       listEmplyees.remove(e);
   }
}


对于 Emplyee 对象或 Id:

public void removeEmployee(int i) {
   for(Employee e: listEmplyees) {
       if(e.getId == i) {
           listEmplyees.remove(e);
       }
   }
}

或者您可以通过他们的 id 将员工存储在 Map 中,并且通过 id 更容易删除。如果您想确保员工永远不会被重复 - 在您的 Employee 类中使用 Set 并覆盖 hashCode 和 equals,因此当您找到相同的对象时,您可以在搜索循环中放置 break。

于 2013-09-12T08:57:18.800 回答
1

还没有。Java 8 会有更好的支持,但现在你可以让代码更简单

for(Employee e: list1)
    if(e.getEmptId() == empId)
        System.out.println("The searched item is " + e);
于 2013-09-12T07:50:34.490 回答
1

List#contains()可以使用方法。但是在您的情况下,由于您需要基于 搜索它empId,因此您需要像这样覆盖equals()您的Employee类中的 。

@Override
public boolean equals(Object obj) {
    if (obj != null) {
        Test other = (Test) obj;
        return i == other.i;
    } else {
        return false;
    }
}

然后你可以做这样的事情:

list1.remove(yourEmp);
于 2013-09-12T07:50:45.503 回答
1

在你的情况下,你得到的很简单

for (Employee e : list) { 
    if (e.getEmpid() == empId) {
       //found here .break
    }
}
于 2013-09-12T07:50:51.620 回答
0

您可以尝试使用内置函数 binarySearch: http ://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#binarySearch (java.util.List , T, java.util.Comparator )

于 2013-09-12T08:18:18.987 回答
0

List 有.contains()方法,您可以通过该方法检查列表是否包含该对象。例如:我有一个products将产品对象存储在列表中的列表。

List<Product> products;
if(products.contains(tempProduct)){
     //    do some operations
}
于 2013-09-12T07:50:51.717 回答