1

私は対象人物とのリンクリストを持っています。

Class person{
   int age;
   String name;
   String address
}

ここで、オブジェクトがリストに含まれているかどうかを確認したいと思います。しかし、私の問題は、一部のフィールドのみが関連することです。たとえば、18 歳の tony という人物がリストに含まれているかどうかを確認したいとします。

リストはそれをサポートしていますか? そうでない場合、どのデータ構造がそれをサポートしていますか?

4

6 に答える 6

3

まあ、単純なループを使用できます。

for (int i=0; i<list.size(); i++) {
    Person p = list.get(i);
    if (p.name.equals("Tony") && p.age == 18) {
        //p is the person you were looking for
        //do whatever you wanted to do with p
        //if you don't want to include duplicate "Tonies" then add a break;
    }
}
于 2013-03-14T15:22:24.087 に答える
2

このクラスは、databseのテーブルにマップでき、年齢が18歳を超える人からselect*fromを実行する必要があります。

それを行うには2つのケースがあります:onはインデックスなしです:databseはすべての値を読み取り、ageフィールド値と比較します。listの場合も同じです:リスト要素を解析すると確実に見つかりますが、これは最も遅い方法。

もう1つは、検索の最適化です。データベースの関連フィールドにインデックスを追加します。リストでは、検索を高速化するために他のデータ収集を行うことができます。

例:LinkedHashSet> indexedByAge18歳または18歳より前の人に尋ねるだけで、addAll()メソッドを使用して1つにマージする必要のある一連のArrayListを取得できます。

于 2013-03-14T15:27:08.690 に答える
2

このように確認できます

ArrayList<Person> persons=new ArrayList<Person>();

人物を確認するには

このようにする

for(Person p : persons)
{
 if (p.name.equals("Tony") && p.age == 18)
}
于 2013-03-14T15:24:24.483 に答える
2

リストにはcontains(obj)比較するメソッドがあります(o==null ? e==null : o.equals(e))

したがってequals、Person クラスでメソッドをオーバーライドすると、 list.contains(obj)true/false が直接返されます。

于 2013-03-14T15:22:53.357 に答える
2

さて、人を a に入れて、List<Person>それを繰り返すことができます:

for(Person p : personList){
    if ("tony".equals(p.name) && p.age == 18){
        //match - do some stuff
        ;
    }
}
于 2013-03-14T15:22:25.883 に答える
1

少し面倒ですが、次のようにメソッドをオーバーライドequalsできます。

class Person
{
   int age;
   String name;
   String address;

   Person(int a, String n, String ad) { age = a; name = n; address = ad; };
   @Override
   public boolean equals(Object o)
   {
      Person p = (Person)o;
      if (p.age != -1 && age != -1 && p.age != age)
         return false;
      if (p.name != null && name != null && !p.name.equals(name))
         return false;
      if (p.address != null && address != null && !p.address.equals(address))
         return false;
      return true;
   }
}

と は初期化されていない値であると想定-1nullています。

使用法:

ArrayList<Person> arr = new ArrayList<Person>();
arr.add(new Person(18,"tony","here"));
System.out.println(arr.contains(new Person(18,"tony",null))); // prints true
于 2013-03-14T15:30:05.940 に答える