1

私はこれに沿って何かを持っています:

public HashMap<Boolean, String> map = new HashMap();
map.put(this.inverted, "Inverted");
map.put(this.active, "Loading");
System.out.println(map.size());

サイズが常に1であることを確認した後、map.putを使用すると以前のデータが上書きされることに気付きました。私は現在、ハッシュマップを反復処理しようとしています。以前のマッピングを上書きせずにマッピングを追加する方法はありますか?

4

7 に答える 7

3

HashMapを次のように宣言しました: -

public HashMap<Boolean, String> map = new HashMap();

では、最大いくつのマッピングを に含めることができるか考えてみてくださいmap。あなたが考えることによって得られる答え、あなたのBooleanタイプが取ることができるすべての値。これは、 に重複キーを含めることができないためですHashMap

したがって、おそらくあなたは今、2 mappingsあなたのマップに最大で 1 つだけtruefalse持つことができることを知って3rdnullますHashMap

したがって、あなたの場合、 と の両方this.invertedがまたはthis.activeのいずれかである場合。その場合、そこに存在できるのはそのうちの 1 つだけであり、それが後で挿入される値になります。truefalse

以前のものを上書きせずにマッピングを追加する方法はありますか?

おそらく、HashMapを間違って作成したのでしょう。マップを次のように宣言する必要があります: -

private Map<String, Boolean> map = new HashMap();

そして、次のように 2 つのマッピングを配置できるようになりました: -

map.put("Inverted", this.inverted);
map.put("Loading", this.active);
于 2013-01-14T08:30:06.910 に答える
1

それはthis.inverted.equals(this.active)this.inverted.hashcode()==this.active.hashcode()

キーの equals メソッドを再定義する必要があるかもしれません。

于 2013-01-14T08:28:48.023 に答える
0

MAP内

キーを値にマップするオブジェクト。マップに重複キーを含めることはできません。各キーは、最大で 1 つの値にマップできます。--->マップ APIから

あなたの実装から、両方が同じ値を持つ可能性がthis.invertedあります。this.active

一度入力を確認してください。keySet を出力して確認します。

または入力をに変更しますMap<String, Boolean>

于 2013-01-14T08:29:47.217 に答える
0

@Frankが提案するように、マップを反転する必要があります。

public final Map<String, Boolean> map = new HashMap<>();

map.put("Inverted", this.inverted);
map.put("Loading", this.active);
System.out.println(map);
于 2013-01-14T08:30:16.430 に答える
0

キーが以前の値と同じである場合、標準の Java マップで上書きされます。これを望まない場合は、たとえば commons-collections に実装されている multimap を見ることができます。1 つのキーに対して異なる値を保持できます。

于 2013-01-14T08:31:25.897 に答える
0

ハッシュマップはキーと値のペアに基づいています。キーが等しい(ハッシュコードが同じ)場合、説明したとおりに動作します。

ユースケースでは、キーと値のペアを逆にすることが役立ちます。

public HashMap<String, Boolean> map = new HashMap();
map.put("Inverted", this.inverted); 
map.put("Loading", this.active);
System.out.println(map.size());
于 2013-01-14T08:32:07.783 に答える