hashmap为什么要允许key和value为空 但是hashtable却不允许呢?源码说这是特殊的map,难道它除了线程安全,还有别的吗?
7条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
FFZ2009 2016-08-19 02:42最佳回答 专家已采纳HashTable是Java中的遗留类,现在不怎么用了,这里HashMap vs HashTable有个解释。也许HashTable类的设计者当时认为null作为key 和value 是没有什么用的。
HashMap是之后的版本引进的类,它的接口Map表达的意义更为广泛,也许HashMap的设计者认为null作为key和value是有实际意义的,所以才允许为null.
当然实际项目中,真的是有value为null的情况的。key为null的情况比较少见,但不代表没有。HashMap允许null为key和value应当是类的设计者思考让这个类更有用的设计吧。采纳该答案 已采纳该答案 专家已采纳评论解决 无用打赏举报微信扫一扫
分享评论登录 后可回复...
查看更多回答(6条)
报告相同问题?
提交
相关推荐 更多相似问题
- 2016-08-18 16:02回答 7 已采纳 HashTable是Java中的遗留类,现在不怎么用了,[这里HashMap vs HashTable](http://blog.csdn.net/ffz2009/article/details/52
- 2021-05-19 20:19回答 4 已采纳 https://zhidao.baidu.com/question/181759229316819524.html 参考这篇文章
- 2019-12-26 15:17回答 3 已采纳 无非就是遍历了,基本都得O(n)吧
- 2020-12-26 11:41remarkable_29的博客 public synchronized V put(K key, V value) { // Make sure the value is not null if (value == null) { throw new NullPointerException(); } // Makes sure the key is not already in the ha
- 2021-03-22 13:57weixin_39713763的博客 1.从源码分析HashMap从源码分析:HashMap在put的时候会调用hash()方法来计算key的hashcode值,可以从hash算法中看出当key==null时返回的值为0。因此key为null时,hash算法返回值为0,不会调用key的hashcode方法。...
- 2020-03-22 12:23N_a_n的博客 当调用get(key)时,若返回的value为空,能不能确定这个value是存的是null还是因为没有这个key返回的null。 原因 HashMap 因为HashMap是应用在单线程场景下,在源码中,当判断key为空时,会把val...
- 2022-03-11 16:03回答 4 已采纳 value就是键值对中的“值”,next是当计算出来的index相同,发生碰撞时,把这个节点对象连接到上一个节点对象,形成链表。和你说的并不冲突,next的类型也是Node,存放值的是value。
- 2021-07-28 09:01回答 1 已采纳 取余是为了得到数组的下标,比如数组长度是5,(hashCode % 5)结果区间是[0,5)。hashMap中有负载因子,当大小达到时就会扩容,从而重新计算下标。
- 2016-08-18 15:34回答 4 已采纳 从源代码的角度来说,确实可以不需要,在stackoverflow上看到的一种解释是,为了java api的文档生成工具而优化,产生更精确的类型的文档。
- 2019-04-08 15:36jac-jm的博客 HashMap可以存储一个Key为null,多个value为null的元素,但是Hashtable却不可以存储 HashMap.class: // 此处计算key的hash值时,会判断是否为null,如果是,则返回0,即key为null的键值对 // 的hash为0。因此...
- 2018-12-30 16:16Mr.LiJiaHao的博客 1.从源码分析 HashMap从源码分析: HashMap在put的时候会调用hash()方法来计算key的hashcode值,可以从hash算法中看出当key==null时返回的值为0。...上面可以看出当HashTable存入的value为null时,抛出Nul...
- 2019-03-01 11:40HD243608836的博客 Hashtable对象的key、value值均不可为null。 且两者的的key值均不能重复,若添加key相同的键值对,后面的value会自动覆盖前面的value,但不会报错。 1.从源码分析 HashMap从源码分析: HashMap在put的...
- 2021-05-28 11:20回答 5 已采纳 存储元素采用的是hash表存储数据,每存储一个对象的时候,都会调用其hashCode()方法,算出其hash值,如果相同,则认为是相同的数据,直接不存储,如果hash值不同,则再调用其equals方法
- 2018-07-25 06:05回答 3 已采纳 功能都是一样的,但是java本身的随着jdk它的二进制版本会变化,导致序列化不兼容,所以google又搞了一个!
- 2021-05-14 00:30回答 3 已采纳 equals相等,hashCode一定相等; 换句话说:两个对象hashCode都不同,两个对象就不同,根本没有必要equals了,这样快的多 并且map的put方法是根据hashCode确定添加
- 2019-10-11 10:08land135790的博客 HashTable源代码: /** * Maps the specified <code>key</code> to the specified * <code>value</code> in this hashtable. Neither the key nor the * value can be <code>...
- 2020-08-20 17:01若等无在的博客 线程安全时不能为Null的原因: 线程安全代表集合会在多线程场景...多线程场景下:假设concurrentHashMap允许存放值为null的value。有A、B两个线程。 线程A调用concurrentHashMap.get(key1)方法,返回为null 我们用contai
- 2021-07-04 00:13LiZhen798的博客 1.从源码分析 HashMap从源码分析: HashMap在put的时候会调用hash()方法来计算key的hashcode值,可以从hash算法中看出当key==null时返回的值为0。...如果value不为null,而key为空,在执行到int hash = key.h.
- 2022-05-04 22:18回答 3 已采纳 没有访问修饰符说明是default访问权限,该权限是只有本类和本包的类可以访问,所以需要是java.util包下的才可以
- 2019-10-08 15:32程序猿哦的博客 结论:HashMap对象的key、value值均可为null。 HahTable对象的key、value值均不可为null。 且两者的的key值均不能重复,若添加key相同的键值对,后面的value会自动覆盖前面的value,但不会报错 代码验证: public ...
- 没有解决我的问题, 去提问