2016-04-26 3 views
1

Здесь у меня есть образец кода для Hash Table и Concurrent Hash Map, который не позволяет использовать нулевой ключ как объект, но оба синхронизированы.Почему синхронизированный объект дает нулевой указатель Исключение, если мы добавляем нулевой ключ в качестве объекта.?

public class Example 
    { 
public static void main(String[] args) 
{ 
    ConcurrentHashMap<String,String> premiumPhone = 
          new ConcurrentHashMap<String,String>(); 
    premiumPhone.put("Apple", "iPhone"); 
    premiumPhone.put("HTC", "HTC one"); 
    premiumPhone.put(null,"S5"); 

    Iterator iterator = premiumPhone.keySet().iterator(); 

    while (iterator.hasNext()) 
    { 
     System.out.println(premiumPhone.get(iterator.next())); 
     premiumPhone.put("Sony", "Xperia Z"); 
    } 

} 
} 

ответ

2

Из Javadoc для ConcurrentHashMap

Как Hashtable, но в отличие от HashMap, этот класс не допускает нулевой до использоваться в качестве ключа или значения.

https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentHashMap.html

Кроме того, посмотрите на это: https://stackoverflow.com/a/9298113/2227788

+0

почему сериализованная объект дает исключения нулевого указателя. – Santosh

+0

@Santosh вы сериализуете объект, вы передаете ссылку в качестве ключа. –

+0

@Santosh Я не понимаю, что вы имеете в виду. Вы не сериализуете Object, вы пытаетесь поместить нулевой ключ в ConcurrentHashMap, что невозможно, как указано в связанном Javadoc I. –