Mapに含まれるすべてのキーを取得する必要がある場合は、非常に便利なjava.util.HashMap.keySet()メソッドを使用できます。この記事では、その仕組みについて説明します。ご存知のとおり、HashMapクラスはMapインターフェイスを実装しているため、例ではHashMap keySet()メソッドを使用します。
HashMap keySet() メソッドの署名と動作原理
Set<K> keySet()メソッドは、このマップに含まれるキーのSetビューを返します。キーを保持するこの Set コレクションの特徴は、その中に重複した要素を含めることができないことです。セットには地図が裏付けられています。つまり、マップ内で何かが変更された場合、それはセットに反映され、その逆も同様です。たとえば、このセットから項目を削除すると、キーとそれに対応する値がマップから自動的に削除されますが、そこに新しい項目を追加することはできません。HashMap keySet() の例
友人の名前とデジタル キーを含むHashMap を作成し、 HashMap keySet()メソッドを使用してキーのセットを出力しましょう。
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class KeySetDemo {
public static void main(String[] args) {
Map<Integer, String> myHashMap = new HashMap<>();
myHashMap.put(1, "John");
myHashMap.put(2, "Ivy");
myHashMap.put(3, "Ricky");
myHashMap.put(4, "Andrew");
myHashMap.put(5, "Alex");
//using map.keyset() method and print out the result
Set<Integer> myKeySet = myHashMap.keySet();
System.out.println("myKeySet of the map: "+myKeySet);
出力は次のとおりです。
マップのキー: [1、2、3、4、5]
Java にはjava.util.HashMap.keySet()メソッド の他に、 entrySet()メソッドがあり、これもSetを返しますが、このセットにはキーと値のペアが含まれます。次に、 java.util.HashMap.keySet()メソッドとjava.util.HashMap.entrySet()メソッドの両方を使用した例を示します。
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class KeySetDemo {
public static void main(String[] args) {
Map<Integer, String> myHashMap = new HashMap<>();
myHashMap.put(1, "John");
myHashMap.put(2, "Ivy");
myHashMap.put(3, "Ricky");
myHashMap.put(4, "Andrew");
myHashMap.put(5, "Alex");
//using map.keyset() method and print out the result
Set<Integer> myKeySet = myHashMap.keySet();
System.out.println("keys of the map: " + myKeySet);
System.out.println("keys and values of the map: " );
for( Map.Entry e : myHashMap.entrySet()){
System.out.println(e.getKey() + " : " + e.getValue());
}
}
}
出力は次のとおりです。
マップのキー: [1、2、3、4、5] マップのキーと値: 1 : John 2 : Ivy 3 : Ricky 4 : Andrew 5 : Alex
ここで、 keySet から要素を削除して、それが元のHashMapに影響を与えることを確認してみましょう。
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class KeySetDemo {
public static void main(String[] args) {
Map<Integer, String> myHashMap = new HashMap<>();
myHashMap.put(1, "John");
myHashMap.put(2, "Ivy");
myHashMap.put(3, "Ricky");
myHashMap.put(4, "Andrew");
myHashMap.put(5, "Alex");
//using map.keyset() method and print out the result
Set<Integer> myKeySet = myHashMap.keySet();
System.out.println("keys of the map: " + myKeySet);
myKeySet.remove(4);
System.out.println("myHashMap after removing an element from myKeySet: " + myHashMap);
System.out.println("keys of the map: " + myKeySet);
}
}
出力は次のとおりです。
マップのキー: [1, 2, 3, 4, 5] myKeySet から要素を削除した後の myHashMap: {1=John, 2=Ivy, 3=Ricky, 5=Alex} マップのキー: [1, 2] 、3、5]
ご覧のとおり、 Set からキー「4」を削除した結果、 HashMap からペア「4-Alex」が削除されました。次に、 keySet()にキーを追加してみましょう。
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class KeySetDemo {
public static void main(String[] args) {
Map<Integer, String> myHashMap = new HashMap<>();
myHashMap.put(1, "John");
myHashMap.put(2, "Ivy");
myHashMap.put(3, "Ricky");
myHashMap.put(4, "Andrew");
myHashMap.put(5, "Alex");
//using map.keyset() method and print out the result
Set<Integer> myKeySet = myHashMap.keySet();
System.out.println("keys of the map: " + myKeySet);
myKeySet.add(7);
}
}
この場合、 keySetがhashMapに接続されている ため、例外が発生します。
マップのキー: [1、2、3、4、5] スレッド「メイン」の例外 java.lang.UnsupportedOperationException (java.base/java.util.AbstractCollection.add(AbstractCollection.java:251)、KeySetDemo.main) (KeySetDemo.java:20) プロセスは終了コード 1 で終了しました
GO TO FULL VERSION