如果您需要獲取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