您的位置 首页 java

阿里面试:java中为什么HashTable的K-V不能是null

问题描述

HashMap中的key-value可以是null,为什么 Hashtable 和ConcurrentHashMap中的不可以是null呢?

思考

这个问题还要从HashMap和HashTable的区别来说,HashTable内的方法是同步的,而HashMap不是;

所以一般来讲,HashMap不是线程安全的,一般只用于单线程中;而HashTable则往往用于 多线程 中;

在允许key – value为null的情况下,考虑下面一个场景:

map.get(key) 的返回结果是null,那么是因为不存在对应的key是null呢,还是key对应的value就是null;

对于单线程来讲,这个问题是可以解决的,通过map.contains(key)就可以判断,但是对于多线程来讲,要解决这个问题就很复杂了,必须由外部保证contains 与 get操作的原子性,正是出于对这个问题考虑,所以不允许value为null;(实际上HashTable中并没有提供contains方法,也是因为这个原因)

那么为什么key也不能是null呢?

由于null不是对象,因此不能在其上调用.equals()或. hashCode (),因此Hashtable无法将其计算哈希值以用作键。但是HashMap对此做了特殊处理;

小结

HashTable是很早的一个类了,JDK已经并不推荐使用;

在并发场景下,更建议使用ConcrrentHashMap

文章来源:智云一二三科技

文章标题:阿里面试:java中为什么HashTable的K-V不能是null

文章地址:https://www.zhihuclub.com/187060.shtml

关于作者: 智云科技

热门文章

网站地图