java 面试hashmap(java中为什么HashTable的K-V不能是null)
HashMap中的key-value可以是null,为什么Hashtable和ConcurrentHashMap中的不可以是null呢?,今天小编就来聊一聊关于java 面试hashmap?接下来我们就一起去研究一下吧!
java 面试hashmap
问题描述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
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com