繁体   English   中英

Java集合HashTable和HashMap

[英]Java Collections HashTable and HashMap

为什么在Java中Hashmap允许一个空键,而在Hashtable的情况下不允许呢?

http://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html

如果您查看HashMap文档

HashMap类与HashTable大致等效,除了它是不同步的并且允许使用null 。)

HashTableHashMap的较旧版本,在处理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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM