CodeGym /Java Blog /ランダム /HashMap の既存のキーの値を更新する方法
John Squirrels
レベル 41
San Francisco

HashMap の既存のキーの値を更新する方法

ランダム グループに公開済み
HashMapやその他のMapには常にキーと値が存在することがわかります。キーがキーと呼ばれるのには、キーによって値にアクセスできるためです。キーは一意ですが、値は一意ではありません。したがって、値が重複する可能性があるため、値によってキーを取得することはできません。この記事では、Java のHashMapで既存のキーの値を更新する方法を説明します。Java 構文を覚えてみましょう。Java のHashMap は次の方法で宣言されます。

 HashMap<Key, Value> name
例を挙げてみましょう。たとえば、私たちには 4 人の友人がいて、特に彼らのためにHashMapを作成し、名前を入力しました。彼らのキーは整数です。

Map<Integer, String> names = new HashMap<Integer, String>();
       names.put(1, "Stan");
       names.put(2, "Kyle");
       names.put(3, "Kenny");
       names.put(4, "Cartman");
注:さまざまな方法でマップ を作成し、入力できます。たとえば、初期化ブロックを使用します。ここにあります:

Map<Integer, String> names = new HashMap<Integer, String>() {
           {
               put(1, "Stan");
               put(2, "Kyle");
               put(3, "Kenny");
               put(4, "Cartman");
           }
       };
または、メソッドHashMap コンストラクターを他のマップ引数とともに使用します。このメソッドはバージョン 9 以降で使用できます。

Map<Integer, String> names = new HashMap<>(Map.of(1, "Stan", 2, "Kyle", 3, "Kenny", 4, "Cartman"));
前に述べたように、HashMapのキーは整数であり、値にはいくつかの文字列 (この場合は文字の名前) が含まれています。さて、ケニーに何か悪いことが起こったとしましょう(サウスパークの漫画シリーズを知っている読者なら、ケニーに何か悪いことが頻繁に起こっていることを確実に知っています)。したがって、それが起こった場合、私たちは Kenny をこの会社 (私たちのHashMap ) から削除し、彼を別の友人、たとえば Butters という名前で置き換える必要があります。これは値を更新する操作であるため、非常に簡単に実行できます。私たちの Kenny 少年はキー == 3を持っています。Kenny が配置されているキー 3 の値を変更する必要があります。put()メソッドを使用してこれを行うことができます。

names.put(3, "Butters");
この場合、マップを画面に表示すると、結果は次のようになります。

{1=Stan, 2=Kyle, 3=Butters, 4=Cartman}
Kenny に何も問題がなく、彼を会社に残しておきたいが、彼のキーを更新する理由がある場合はどうなるでしょうか? たとえば、彼はもう 3 番ではなく、5 番です。キー 5 を使用して Kenny をマップに再度入力し、結果を出力してみましょう。putメソッドをうまく活用できます。この例の完全なコードは次のとおりです。

import java.util.HashMap;

public class HashMapUpdKey {
   public static void main(String[] args) {
       Map<Integer, String> names = new HashMap<>(Map.of(1, "Stan", 2, "Kyle", 3, "Kenny", 4, "Cartman"));
       names.put(5, "Kenny");
       System.out.println(names);
   }
}
おそらく、結果がどうなるかはすでに推測しているでしょう。

{1=Stan, 2=Kyle, 3=Kenny, 4=Cartman, 5=Kenny}
これは私たちが期待されていたことなのでしょうか?これで Kenny はHashMapに 2 つのキーを持ちました。厳密に言えば、オブジェクトはキーによって一意に決定されるため、どのような意味であっても、これらは 2 つの異なる Kenny です。それは人のパスポートのようなものであり、固有である必要があります。したがって、直接追加したハッシュマップ キーの名前を変更したり更新したりすることはできません。この操作は単純に利用できません。ただし、新しいキーを使用して新しいエントリを挿入し、古いキーを削除するという欺瞞的な操作を行うこともできます。これは、 HashMap の 削除メソッドを使用して実行できます。Remove() は関連付けを削除するだけでなく、削除された値 (以前に存在していた場合) も返します。この操作で例を補足しましょう。

//easy replacement example
import java.util.HashMap;

public class HashMapUpdKey {
   public static void main(String[] args) {
      Map<Integer, String> names = new HashMap<>(Map.of(1, "Stan", 2, "Kyle", 3, "Kenny", 4, "Cartman"));
           
       names.put(5, "Kenny"); //Adding “new” Kenny 
       System.out.println(names.remove(3)); //Update value of the key: Removing “old” Kenny and print out deleted value

       System.out.println(names);
   }
}
これで、ようやく必要なものが得られ、Kenny を見つけるためのキーが更新されました。出力は次のとおりです。
ケニー {1=スタン、2=カイル、4=カートマン、5=ケニー}
もちろん、「古い」Kenny を削除して新しい Kenny を追加する操作は、任意の順序で実行できます。それらは本質的に独立しています。または、1 行だけを使用してコードを短縮します。

names.put(5, names.remove(3));
結果は必ず同じになります。したがって、Java HashMapでキーを変更する唯一の適切な方法は、エントリを削除し、同じ値を新しいキーで挿入することです。別の方法でも実行できますが、要素の追加と削除についてはほぼ同じ話になります。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION