wangtong95
w狸猫
2016-08-18 16:02
采纳率: 20%
浏览 13.7k
已采纳

hashmap为什么要允许key和value为空 但是hashtable却不允许呢?

hashmap为什么要允许key和value为空 但是hashtable却不允许呢?源码说这是特殊的map,难道它除了线程安全,还有别的吗?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • FFZ2009
    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应当是类的设计者思考让这个类更有用的设计吧。

    点赞 评论
  • jxplus
    jxplus 2016-08-19 01:34

    直接看jdk源码吧,各种文字说明都是基于源码的:
    图片说明

    点赞 10 评论
  • caozhy

    这个怎么回答呢,如果两者一样那么其中一个就显得多余了。
    hashmap是一种轻量的实现,着重在于提供一种可以快速检索的数据结构,从底层实现看,线程安全或者不安全,都可以做到key value为空。
    但是既然是轻量的实现,那么不判断为空就更加提高了效率,而且如果你需要判断的话,有hashtable,这里再实现功能就重复了。

    点赞 评论
  • yuyubingMan
    yuyubingMan 2016-08-19 05:28

    从使用者角度看:
    HashTable,在插入的时候需要保证非null
    HashMap,插入不需要考虑null
    获取的结果都需要考虑null

    而设计者必须遵从使用者的需求而设计。

    点赞 评论
  • luliang0
    luliang0 2016-08-20 15:58

    恩 解释的很详细了

    点赞 评论
  • yyqkn2015
    亲爱的耀哥哥 2016-08-25 06:32

    解释的很详细了,分给二楼吧

    点赞 评论
  • wangtong95
    w狸猫 2016-08-26 03:24

    我知道jdk.的源码实现 只想知道 为什么要这么设计

    点赞 评论

相关推荐