2012-05-26 19 views
61

ハッシュマップキーの名前を変更する方法を探していますが、Javaで可能かどうかわかりません。ハッシュマップキーの名前を変更することはできますか?

+8

まあ、私は願っていません。キーと値のペアを削除して再入力することは、方法のように思えます。とにかく地図自体の参照を通常処理するだけであることに注意してください。 –

+3

ハッシュエントリのキーを変更しないでください!あなたが運が良ければ、同じハッシュコードで何かに変更し、何が起こったか把握しようとすると少し狂ってしまうでしょう。あなたが不運な場合、あなたは見つからないエントリで終わるでしょう(まあ、テーブル全体の次の再構築までです)。 Remove/reinsertははるかに安心していて、かなり安価であるはずです(結局のところ、すべて参考になります)。 –

答えて

86

要素を削除して、新しい名前で再度入力してください。

Object obj = map.remove("oldKey"); 
map.put("newKey", obj); 
+34

+1。読みやすくするためには 'map.put(" newKey "、map.remove(" oldKey "));と' oldKey'を含んでいます –

+6

可読性に関する限り、私は全く反対します。オブジェクトがマップから削除され、追加されます。そして、OPはJavaにとってかなり新しいようなので、私はそれをそのようにすることに決めました。しかし、パフォーマンスのために、あなたのバージョンは当然です(コンパイラが私のバージョンをあなたの方法で最適化するとは思わないので)。 –

+2

javac 1.8.0_45では、1行のバージョンが2バイト短いため驚いています。ジェネリックでもっと厄介なことに、 'obj'をキャストしたり、別の型として宣言したりすることはできませんが、もちろん' remove'の結果を直接渡すことはできます。 –

4

ハッシュマップキーの名前を変更しない場合は、新しいキーで新しいエントリを挿入し、古いキーを削除する必要があります。

11

が新しいキーに、名前を変更する必要があるキーの値を割り当てます。マップ内のキーがStringていると仮定すると、それはそのように達成することができました。古いキーを削除します。

hashMap.put("New_Key", hashMap.get("Old_Key")); 
hashMap.remove("Old_Key"); 
4

あなたはキーを一度に加えハッシュマップを修正/変更することはできません。

キーを削除/削除し、新しいキーと値のペアを挿入する方法があります。

理由:HashMapの内部実装ではHashMapのキーモディファイを最終としてマーク。参考のために

static class Entry<K ,V> implements Map.Entry<K ,V> 
{ 
final K key; 
V value; 
Entry<K ,V> next; 
final int hash; 
...//More code goes here 
} 

HashMap

6
hashMap.put("New_Key", hashMap.remove("Old_Key")); 

これは、あなたがやりたいだろうけど、あなたはキーの場所が変更されていることがわかります。

+0

@Vinsは文書を再訪してください:D、remove()このオブジェクトをチェックしてください。https://www.tutorialspoint.com/java/util/hashmap_remove.htm –

+0

私の悪い、私は私のコメントを削除し、それに投票しました。申し訳ありません。 – Vins

関連する問題