CodeGym /Java 博客 /随机的 /如何在 java.util.Map 中使用 keySet 方法
John Squirrels
第 41 级
San Francisco

如何在 java.util.Map 中使用 keySet 方法

已在 随机的 群组中发布
如果需要获取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.util.HashMap.keySet()方法之外,Java 中还有一个entrySet()方法,它也返回一个Set,但是这个 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] 线程“main”中的异常 java.base/java.util.AbstractCollection.add(AbstractCollection.java:251) 处的 java.lang.UnsupportedOperationException 位于 KeySetDemo.main (KeySetDemo.java:20) 进程结束,退出代码为 1
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION