在ArrayList中搜索特定对象

时间:2012-12-05 15:00:10

标签: java class object arraylist

我有一个名为Person的班级。它有以下attributes;它有2个属性IDTelephone。 1个人可以有很多电话,因此您可能会看到下面有多个ID的人。

public ArrayList<Person> all(){

    p = new ArrayList<Person>();
    p.add(new Person(1,266763));
    p.add(new Person(1, 358643));
    p.add(new Person(2, 4667763));

    return p; 
}

还有另一个名为PersonDB的班级。它将有一个名为findPersonWithTheTelephoneNumber(int telephone)的方法。

public void findPersonWithTheTelephoneNumber(int telephone) {
   Person pp = new Person();
   ArrayList<Person> personList = pp.all();

   // Now i want to find the Person object that will match the telephone number of these list of personList.


}

personList,有3-4个Person对象。我需要搜索PersonArrayList并找到与Person对象匹配的对象。我怎么能这样做?

注意:我试过personList.contains()。但这不起作用。

6 个答案:

答案 0 :(得分:3)

//...
Person foundPerson = null;
for (Person p : personList){
    if (p.getTelephone() == telephone){
         foundPerson = p; //or simply return it from there
         break;
    }
}

要实施hashCodeequals,您可以观察this tutorial

答案 1 :(得分:2)

首先,为什么没有List<Integer>用于存储特定人的所有telephoneNumbers。这样,您就不必为同一Person的每个telephoneNumber创建单独的personId个实例,这根本没有意义。

您可以将Person类的属性更改为: -

private int id;
private List<Integer> telephoneNumbers = new ArrayList<Integer>();

然后有一份人员名单,就像你一样。

要查找具有特定电话号码的Person,您需要遍历List<Person>

for (Person person: personList) {
    if (person.getTelephoneNumbers().contains(telephone)) {
        return person;
    }
}

答案 2 :(得分:1)

  

我试过personList.contains()

确保为Person类覆盖Object.equals()Object.hashCode()。但是你必须对电话号码进行平等检查,假设电话号码是唯一的。这不是解决方案,而是解决方法。使用bellum的答案。将其标记为正确答案。

答案 3 :(得分:0)

您需要迭代数组,逐个检查人员的电话号码,当您到达那个人时,只需将其分配给变量。

答案 4 :(得分:0)

使用for循环遍历列表。在循环体中,检查列表中人员的电话号码是否是您要查找的电话号码。如果是,则返回此人。

请参阅Oracle Java教程中的The for Statement

答案 5 :(得分:0)

许多解决方案,通过电话号码将两个人定义为相同,但如果将两个住在同一个房子和/或具有相同电话号码的人添加到列表中会怎样?哪一个是正确的?。

在急于找到这个人之前,你必须确定一种方法来确定两个人是否确实是平等的而没有模棱两可的结果。除非您通过使其独一无二来限制基于该电话号码的人员创建(您在问题中没有说明这一点,所以我认为没有这样的限制),搜索的结果是不确定的。

您使用的是ArrayList,因此您无法保证插入订单的结果。

我建议您将同等性测试基于人ID而不是手机。为了防止修改id,只需为它定义一个getter,并且根本不定义setId方法。然后,您可以根据equals重新定义hashcode(和id,如果您愿意的话)。