2013-02-20 26 views
-1

在一次採訪中,有人問道,散列Map是否可以將null存儲爲密鑰,並且我回答是肯定的,因爲我們可以將null存儲爲HashMap中的密鑰,然後他進一步詢問假設HasMap創建時由String作爲Key組成,並且它的assosciated值存在,現在他不希望null在任何情況下都應該將null存儲爲key,那麼爲了實現這一點需要進行預檢。 。下面 是HashMap中..關於在地圖中檢查地圖中應該沒有空密鑰

Map map = new HashMap(); 
map.put("ty" ,"Spring"); 
map.put(null, "nullkey"); 
map.put("Anupam", "Hibernate"); 
map.put("Ravi", ".Net"); 

如上圖所示空關鍵是有在上面地圖這是我們不想要的,做什麼預檢需要使NP關鍵應該有作爲空的HashMap中。請指教。

+3

空字符串不爲空。 – 2013-02-20 18:27:51

+0

如果只有某種方式來通過哈希映射的'keys'遍歷.... – 2013-02-20 18:32:04

+0

@RohitJain對不起,它已被編輯。謝謝 – user2080568 2013-02-20 18:32:25

回答

1

HashMap事實上確實允許空鍵。

其他Map實現不像HashtableConcurrentHashMap一樣,如果嘗試添加空鍵,將會拋出NullPointerException。

如果你想禁止空密鑰,你可以使用這些實現中的一個,你自己的HashMap的子類。

事情是這樣的:

public class MyHashMap extends HashMap<K,V> { 
    @Override 
    public V put(K key, V value) { 
    if (key == null) { 
     throw new NullPointerException(); 
    } 
    return super.put(key, value); 
    } 
} 
0

迭代你的HashMap和查找值:

Iterator it = map.entrySet().iterator(); 

while (it.hasNext()) { 
     Map.Entry dataPair = (Map.Entry)it.next(); 
     System.out.println(dataPair.getKey() + " : " + dataPair.getValue()); 
} 

然後,如果你想刪除或者做一些操作與地圖的關鍵,那麼,在while塊內:

if (dataPair.getKey() == null) { //Todo: Do something here}