综上所述,HashMap和TreeMap允许value为null,而Hashtable和ConcurrentHashMap不允许value为null。在选择使用哪种Map实现时,需要根据具体的应用场景和需求来决定。如果应用需要支持null值,并且是单线程环境,可以选择HashMap;如果需要考虑线程安全且不需要支持null值,可以选择ConcurrentHashMap。
前面分析ConcurrentHashMap的过程中可以发现,其要求key和value不能为空。实际上,不仅仅是ConcurrentHashMap,前面的HashTable,以及ConcurrentSkipListMap,这些并发的Map都不允许为空。在面试的过程中,不少大厂也会拿这个问题做为追问的问题之一。那么我们就来具体聊聊为什么不能为null的深层次的原因。 层次1:源码不支持 ...
HashMap既支持分别为空/null,也支持key和value同时为空/null Hashtable不支持key和value存储null,但支持存空字符串** HashMap HashMap是中支持空键和空值的,不论存入null或者空字符串程序都不会报错。 不过需要注意的是若多条数据key值相同(同为null或者空字符串),则写入时后者会把前者的value值覆盖 key相同导致...
hashmap的key,value都可以为null;当key重复时,第二个key的value会覆盖第一个key的value HashTable 它的key和value都是不能为null的 ConcurrentMap存储数据,它的key和value都是不能为null的 1.HashMap 代码语言:java 复制 //key为null value为nullHashMap<String,String>hashMap=newHashMap<>();hashMap.put(n...
HashMap允许使用null作为其值(value)。在Java中,HashMap的put()方法可以接受一个键(key)和一个值(value),其中值可以是null。当将null作为值插入HashMap时,它会被存储在哈希表的第一个桶(bucket)中。需要注意的是,HashMap中的键(key)不能为null,因为HashMap使用键来计算哈希值并确定数据存储的位置。 以下是...
都可以为空 但是如果有多个空健的话,后面的会把前面的覆盖。你可以做个测试。public static void main(String[] args) { // TODO Auto-generated method stub Map map = new HashMap();map.put(null, null);map.put(null, null);map.put("3", null);for (int i=0;i<map.size();i...
从上述结果可以看出,HashMap 是允许 key 和 value 值都为 null 的。 但ConcurrentHashMap 就不同了,它不但 key 不能为 null,而且 value 也不能为 null,如以下代码所示: ConcurrentHashMap<String,String>concurrentHashMap=newConcurrentHashMap; concurrentHashMap.put(null,"javacn.site"); ...
hashtable是线程安全的, hashmap允许key和value为null,默认初始容量为16,hashtable默认为11, hashmap以2的指数倍扩容,hashtable扩容为2的指数倍加1, HashMap的父类是AbstractMap类,HashTable的父类是Dictionary类, 在多线程并发的环境下推荐使用ConcurrentHashMap,因为它底层采用了分段锁,并不对整个进程进行绑定点...