1

Integer[]、Integer[] の HashMap があります。エントリの 1 つは次のとおりです。

WEIGHTS.put(新しい整数[]{0,0,0,0,0}、新しい整数[]{20,20,15,15,10,10,5,5});

次に、次のように呼び出します。

確率 = WEIGHTS.get(sheriffAndBanditPositions);

sheriffAndBanditPositions は次のとおりです。

Integer[] sheriffAndBanditPositions = new Integer[]{0,0,0,0,0};

これにより、確率が null になります。どうしてこれなの?上記が不可能な場合、一致する Integer[] キーが HashMap にあるかどうかを確認するにはどうすればよいですか? ありがとう!

4

1 に答える 1

5

配列はとメソッドをHashMapオーバーライドしないため、配列はObjectのキーとして機能しません。に渡したのとまったく同じインスタンスを渡した場合にのみ true を返します。hashCodeequalscontainsKeyput

配列の代わりにListorをキーとして使用できます。Set

例えば ​​:

Map<List<Integer>,Integer[]> WEIGHTS = ...
WEIGHTS.put(Arrays.asList(new Integer[]{0,0,0,0,0}), new Integer[]{20,20,15,15,10,10,5,5});
List<Integer> sheriffAndBanditPositions = Arrays.asList(new Integer[]{0,0,0,0,0});
probabilities = WEIGHTS.get(sheriffAndBanditPositions);
于 2016-03-02T12:08:04.633 に答える