在 java ArrayList 中搜索

2022-09-02 22:47:05

我试图找出按ID号搜索客户的最佳方法。下面的代码不起作用;编译器告诉我,我缺少一个语句。ArrayListreturn

Customer findCustomerByid(int id){
    boolean exist=false;

    if(this.customers.isEmpty()) {
        return null;
    }

    for(int i=0;i<this.customers.size();i++) {
        if(this.customers.get(i).getId() == id) {
            exist=true;
            break;
        }

        if(exist) {
            return this.customers.get(id);
        } else {
            return this.customers.get(id);
        }
    }

}

//the customer class is something like that
public class Customer {
    //attributes
    int id;
    int tel;
    String fname;
    String lname;
    String resgistrationDate;
}

答案 1

其他人已经指出了您现有代码中的错误,但我想进一步采取两个步骤。首先,假设您使用的是 Java 1.5+,则可以使用增强的 for 循环实现更高的可读性:

Customer findCustomerByid(int id){    
    for (Customer customer : customers) {
        if (customer.getId() == id) {
            return customer;
        }
    }
    return null; 
}

这也消除了循环前返回的微优化 - 我怀疑你会从中得到任何好处,而且它更多的代码。同样,我删除了标志:一旦你知道答案,就会返回,使代码更简单。nullexists

请注意,在您的原始代码中,我认为您有一个错误。在发现指数客户具有正确的ID后,您随后在指数处返回了客户 - 我怀疑这是否真的是您的意图。iid

其次,如果您要按ID进行大量查找,您是否考虑过将客户放入?Map<Integer, Customer>


答案 2

编译器正在抱怨,因为您当前在 for 循环中有“if(exist)”块。它需要在它之外。

for(int i=0;i<this.customers.size();i++){
        if(this.customers.get(i).getId() == id){
            exist=true;
            break;
        }
}

if(exist) {
    return this.customers.get(id);
} else {
    return this.customers.get(id);
}

话虽如此,有更好的方法来执行此搜索。就个人而言,如果我使用ArrayList,我的解决方案将看起来像Jon Skeet发布的解决方案。


推荐