使用.contains()搜索到arrayList

时间:2013-04-19 09:57:38

标签: java arraylist contains

我试图使用.contains()搜索我的arrylist。

这是我在窗口类中的方法:

    public void findByID() {
    int customer = Integer.parseInt(findCustomerField.getText());

    if (userA.list.contains(customer)) {
        User user = userA.findById(customer);
        output.setText(user.toString());
    }
}

在我之前的版本中,我使用customerID查找客户,我的UserArchive类中的findByID方法如下所示:

    public User findById(int id) {
    for (User u : list) {
        if (u.getCustomerID() == id) {
            return u;
        }
    }
    return null; // or empty User
}

如果我想使用.contains(),最后一个方法应该如何?我认为窗口类方法没问题,不确定。我对使用contains感到无能为力(昨天刚听说过)。

编辑:我不想再使用customerID来查找对象了(这就是以前的版本所做的)我的目标是能够输入例如" Peter"然后找到包含" Peter"的所有对象。根据我的理解,这可以通过某种方式使用.contains()来实现。

编辑2:我得到了它的工作。现在我可以搜索特定的firstName并将其打印出来。编辑目标:我真正想要的是搜索例如" Pe"然后获取包含" Pe"的列表中的每个对象。不仅是名字。将调查Akshay Singhal发布的内容。下面是适用于firstName的方法:

窗口类:

    public void findByID() {
    String customer = findCustomerField.getText();

    if (!customer.equals("")) {
        User user = userA.findByName(customer);
        output.setText(user.toString());
    }
    else
        JOptionPane.showMessageDialog(this, "Does not exist");
}

UserArchive类:

    public User findByName(String name) {
    for (User u : list) {
        if (u.getFirstName().equals(name)) {
            return u;
        }
    }
    return null;
}

4 个答案:

答案 0 :(得分:1)

使用contains()无法解决问题。该方法搜索列表中的对象,而您需要根据列表中对象的属性进行搜索。

您当前的代码看起来是正确的。


关于您最近的修改:

  

我的目标是能够键入例如“Peter”,然后查找包含“Peter”的所有对象。

在这种情况下,您需要非常相似的代码。只需循环,直到找到具有该属性的对象:

public User findByName(String name) {
    for (User u : list) {
        if (u.getName().equals(name)) {
            return u;
        }
    }
    return null;
}

答案 1 :(得分:0)

包含方法检查对象是否存在于集合中。这基本上意味着确定被检查的对象是否等于到集合中的任何对象。

为了建立这种相等性,使用了对象的equals方法。

在这种情况下,您需要在用户对象中覆盖equals方法,以便在ID相同时说明2个用户对象相等。

之后,您可以直接使用contains进行检查。

注意:不要忘记覆盖哈希码方法。

答案 2 :(得分:0)

根据列表的大小以及执行此代码的频率,您尝试的自定义迭代直到找到匹配方法可能没问题,但如果需要频繁查找,如果这些方法你可能想尝试一个:

  1. 不是列表,而是将客户ID的HashMap创建为Key,将相应的User对象创建为值。无论提供的用户ID位于列表顶部还是底部,此方法都应该为您提供接近响应时间。

  2. 您还可以将Collections.sort与自定义比较器一起使用,比较用户对象的ID以对列表进行排序,然后再使用Collections.binarySearch进行搜索,再次使用仅查看用户ID的比较器。作为输入,您只需创建一个新的User对象,并将其ID设置为您要搜索的对象。

答案 3 :(得分:-1)

考虑重写哈希码和您的Person类的等号以识别您的对象。

另请参阅http://docs.oracle.com/javase/6/docs/api/java/util/List.html#contains%28java.lang.Object%29

要使用它,您应该以这样的方式覆盖User的equals()和hashCode()方法:

public boolean equals(Object o){

.... some standard stuff like is Null and instanceof

return this.getCustomerID() == ((User) o).getCustomerID();

}

如果您使用eclipse,则可以生成它。