搜索列表中的元素

时间:2013-09-12 07:48:28

标签: java list collections

如何在列表中搜索?在构建函数中有没有?

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();
        }
    }

}

6 个答案:

答案 0 :(得分:1)

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

for(Employee e: list1)
    if(e.getEmptId() == empId)
        System.out.println("The searched item is " + e);

答案 1 :(得分: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);

答案 2 :(得分:1)

在你的情况下,尽可能简单

for (Employee e : list) { 
    if (e.getEmpid() == empId) {
       //found here .break
    }
}

答案 3 :(得分: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中存储Employees,并且更容易通过id删除。如果你想确保员工永远不会重复 - 在你的Employee类中使用Set和override hashCode和equals,那么当你找到相同的对象时,你可以在你的搜索循环中放置break。

答案 4 :(得分:0)

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

List<Product> products;
if(products.contains(tempProduct)){
     //    do some operations
}

答案 5 :(得分:0)

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