0

Person のインスタンスを作成し、Map<String, Person>. マップ エントリのキーは、Person の name プロパティと同じです。名前は変更できるので、どうすればマップのキーと人のプロパティを同じに保つことができますか?

public class Person{

    private String name;

    public String getName(){
        return this.name;
    }

    public void setName(String name){
        this.name = name;
    }

}

この場合、マップを使用する必要がありますか? たとえばリストを使用してこれを行うより良い方法はありますか?

編集:必要なものは説明できます:リストに似たもの。List.get() 関数がインデックス ID ではなく、オブジェクトのプロパティ値によって返されることだけです。この値を持つオブジェクトをリストに複数含めることはできません。

4

1 に答える 1

0

あなたが言ったように、名前は変更される可能性があるため、名前は適切なキーではありませんが、キーを生成すると、常に既知であり、変更することはできません。外部入力で。

最初のケースで、なぜ人をマップ (または任意のデータ構造) に格納する必要があるのですか?

詳細はよくわかりませんが、すべての人を配列に保存して、毎回名前で検索することはできますが、このリストを繰り返し処理してアイテムを見つけるため、パフォーマンスの問題が発生します.

 public class Person{
     private static int count = 0;
     private string name;
     private int ID;
     public Person(string name){
         this.id =++count;
         this.name = name;
     }
      //the rest of your code;

      public Int GetId(){
         return this.ID;
      }
 }

int の最大サイズによって人数が制限されているため、これは理想的ではない可能性があります。

この方法も非常に優れています。なぜなら、個人の ID をキーオフしているため、名前が一意であることを心配する必要がないからです。

本当に名前でルックアップを行う必要がある場合は、a) マップのインスタンスを保持して、set name が直接呼び出されるたびに更新するか、配列内のすべての人を保持して、いつでもルックアップを行う必要があります。あなたは彼らに行きたいです。

于 2013-11-06T23:48:36.440 に答える