3

我有一堂课叫Person. 它有以下内容attributes;它有 2 个属性ID, 和Telephone。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()。但这不起作用。

4

6 回答 6

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

对于实施hashCodeequals您可以观察本教程

于 2012-12-05T15:02:40.217 回答
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;
    }
}
于 2012-12-05T15:04:08.960 回答
1

我试过 personList.contains()

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

于 2012-12-05T15:02:32.413 回答
0

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

在急于寻找此人之前,您必须定义一种方法来确定两个人是否确实相等,而不会产生模棱两可的结果。除非您通过使其唯一来限制基于该电话号码的人员的创建(您没有在您的问题中澄清这一点,所以我认为没有这样的限制),搜索的结果是未定义的。

您正在使用,ArrayList因此您甚至无法保证插入订单的结果。

我建议您将平等测试建立在一个人的ID而不是电话上。为了防止id' 的修改,只需为其定义一个 getter,根本不定义setId方法。然后,您equals可以hashcode基于id.

于 2012-12-05T15:15:48.893 回答
0

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

于 2012-12-05T15:02:14.743 回答
0

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

请参阅Oracle 的 Java 教程中for声明

于 2012-12-05T15:02:40.360 回答