如果您需要獲取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
GO TO FULL VERSION