0
class Employee

{

    private String name;
    private int age;
    private int empid;

    public Employee(String name, int age, int empid) 
    {
        super();
        this.name = name;
        this.age = age;
        this.empid = empid;
    }
}

上記のクラスを変更して、HashMap のキーとして使用できるようにする方法

4

5 に答える 5

4

ハッシュマップのキーとして使用するクラスに対して、基本的に 3 つのことを行う必要があります。最初にクラスを不変にし、2 番目に hashCode メソッドをオーバーライドし、3 番目に equals メソッドをオーバーライドします。

クラスを不変にする。不変性のルールのいくつかを次に示します。

  • クラスをファイナルにする
  • すべてのメンバーを final にし、静的ブロックまたはコンストラクターで明示的に設定する
  • すべてのメンバーを非公開にする
  • 状態を変更するメソッドはありません

このチュートリアルから、不変クラスの作成について詳しく学んでください。

http://javarevisited.blogspot.in/2013/03/how-to-create-immutable-class-object-java-example-tutorial.html

hashCode および equals メソッドのオーバーライドについて学習するには、次の手順に従います。

http://javarevisited.blogspot.in/2011/02/how-to-write-equals-method-in-java.html

于 2013-07-09T17:31:39.827 に答える
0

あなたは何もする必要はありません。すべてのクラスは Object クラスを拡張します。また、メソッドhashcode()とメソッドequals()は Object クラスで定義されているため、任意のクラスをキーとして使用できます。

ただし、クラスを HashMap キーとして使用する必要がある場合は、これらのメソッドの両方をオーバーライドする必要があります。

Eclipse を IDE として使用している場合は、これらの関数の両方を生成できます。
ソースの任意の場所で Richt-Click を実行するだけです->ソース-> Hashcode() と equals() を生成します。

于 2013-07-09T17:43:25.340 に答える
0

カスタム クラスを HashMap のキーとして作成するための十分な条件。

   1. Override equals and Hashcode - good practice.
      Read Item 8 and Item 9 from Effective Java (must Read) for 
      the general contract among them.
   2. Try to make your Class Immutable. Atleast 
      those fields should be final/immutable on which your hashcode 
      and equals depend. So that you hashcode/equals in dosen't fail later
      in your program

参照のみで等価性をチェックしたい場合 (推奨されません)、IdentityHashMap を使用します。

于 2013-07-09T17:45:41.400 に答える
0

クラスを有効なハッシュ マップ キーとして使用するには、そのクラスで と の両方equalsをオーバーライドする必要がありますhashCode。このhashCode変数は、この特定のオブジェクトの低レベルのルックアップ インデックスを把握するために使用される int を返します。

クラスを不変にすることも良い考えです。ハッシュコードがプログラムの途中で変更された場合、キーは役に立たなくなります。

于 2013-07-09T17:42:28.727 に答える
0

すでにハッシュマップで使用できます。すべてのJava オブジェクトには、ハッシュマップが機能するために必要なhashCodeandメソッドがあります。equals

Map<Employee, Whatever> theMap = new HashMap<Employee, Whatever>();
于 2013-07-09T17:32:15.357 に答える