3

というクラスがありPersonます。次のようになりますattributes; ID、、およびの2つの属性があり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;
    }
}

実装についてはhashCodeこのチュートリアルequalsをご覧ください。

于 2012-12-05T15:02:40.217 に答える
2

まず第一に、なぜあなたは特定の人のためにList<Integer>あなたのすべてを保存するためのを持っていないのですか?telephoneNumbersそうすれば、同じPersonインスタンスごとに個別のインスタンスを作成する必要がなくなります。これは単に意味がありません。telephoneNumberpersonId

Personクラスの属性を次のように変更できます。-

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

そして、あなたが持っているように、人のリストを持っています。

特定のtelephoneNumberを持つを見つけるには、Personを繰り返す必要がありますList<Person>

for (Person person: personList) {
    if (person.getTelephoneNumbers().contains(telephone)) {
        return person;
    }
}
于 2012-12-05T15:04:08.960 に答える
1

私はpersonList.contains()を試しました

必ずPersonクラスをオーバーライドObject.equals()してください。Object.hashCode()ただし、電話番号が一意であると仮定して、電話番号の同等性チェックを行う必要があります。これは解決策ではなく、回避策になります。ベラムの答えを使用してください。正解としてマークしてください。

于 2012-12-05T15:02:32.413 に答える
0

配列を反復処理し、電話番号を1人ずつ確認する必要があります。電話番号に到達したら、それを変数に割り当てるだけです。

于 2012-12-05T15:02:14.743 に答える
0

ループを使用しforてリストを反復処理します。ループの本文で、リスト内の人の電話番号が探している電話番号であるかどうかを確認します。はいの場合は、その人を返します。

OracleのJavaチュートリアルforステートメントを参照してください。

于 2012-12-05T15:02:40.360 に答える
0

多くの解決策では、2人を電話番号で等しいと定義していますが、同じ家に住んでいる2人、および/または同じ電話番号を持つ2人がリストに追加された場合はどうなりますか?どちらが正しいですか?

急いで人を見つける前に、あいまいな結果なしに2人が実際に等しいかどうかを判断する方法を定義する必要があります。その電話番号に基づく人物の作成を一意にすることで制限しない限り(質問でこれを明確にしないため、そのような制限はないと思います)、検索結果は未定義です。

を使用しているArrayListため、挿入順序による結果も保証できません。

ID電話ではなく、人の平等テストをベースにすることをお勧めします。の変更を防ぐには、ゲッターを定義するだけで、メソッドはidまったく定義しないでください。setId次に、に基づいてequals(そして必要に応じて)再定義できます。hashcodeid

于 2012-12-05T15:15:48.893 に答える