[英]Java Collections HashTable and HashMap
为什么在Java中 , Hashmap允许一个空键,而在Hashtable的情况下不允许呢?
http://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html
如果您查看HashMap
文档
HashMap
类与HashTable
大致等效,除了它是不同步的并且允许使用null
。)
HashTable
是HashMap
的较旧版本,在处理null
的情况下失败。 并且HashMap
中添加了该功能,以使其比HashTable
更高级。
哈希表是非常老的类,从JDK 1.0起
要了解这一点,首先,您需要了解作者在该课程上写的评论。
此类实现哈希表,该哈希表将键映射到值。 任何非空对象都可以用作键或值。 为了成功地从哈希表存储和检索对象,用作键的对象必须实现hashCode方法和equals方法。
HashTable
类是在哈希机制上实现的,意味着存储任何键值对,即键对象所需的哈希码。 如果key为null,它将无法给出哈希值,它将通过null指针异常和类似的情况返回值,如果value为null,则抛出null。
但是后来人们意识到空键和值具有其自身的重要性,这就是为什么在后来实现的类(例如HashMap
类)中允许一个空键和多个空值的原因。
对于哈希映射,空键将允许,如果键为空,则对键进行空检查,然后将该元素存储在Entry数组中的零位置。 空键,我们可以使用一些默认值。
HashMap允许使用null键。 如果您尝试插入相同键的另一个值,它将覆盖它。
对于HashTable,如果键或值为null,则put(K key,V value)会引发Null指针异常。
请参考源代码。 HashMap: http : //grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8-b132/java/util/HashMap.java#HashMap.put%28java.lang.Object%2Cjava。 lang.Object 29%
哈希表: http : //grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Hashtable.java#Hashtable.put%28java.lang.Object%2Cjava。 lang.Object 29%
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.