-4

こんにちはHashMapIntegeras key に問題があります。

Integerをマップのキーとして使用すると、一貫性のない結果が得 られます。

Integerキーインとして使用している場合、クラスのオーバーライドとメソッドのHashmap両方がオーバーライドされていることを確認する必要があることを示唆する投稿をいくつか読みました。Integer クラスでは、メソッドは既にオーバーライドされています。メソッドをオーバーライドするにはどうすればよいですか。hashcodeIntegerequals()equals()

4

2 に答える 2

5

原則として、HashMapのキーとして整数を使用しても問題はありません。

ただし、微妙な問題は、equals()の呼び出しに関する限り、同じ数値を含む異なるクラスの数値ラッパーが一致しないことです。

たとえば、これを行うと、次のようになります。

map.put(3, "Test")

次に、次のように値を取得してみてください。

long x = 1;
map.get(x + 2)

元の値は見つかりません。物事を考えずにオートボクシングに依存している場合、この問題が発生することがあります。

于 2012-11-02T02:25:37.980 に答える
3

java.lang.Integer組み込みライブラリで提供される値の型と同様に、equalsとの両方を既にオーバーライドしています。hashCode何もする必要はありません。

于 2012-11-02T01:01:38.883 に答える