Java 关于收集框架
我有一些关于JavaJava 关于收集框架,java,collections,hashmap,hashtable,hashset,Java,Collections,Hashmap,Hashtable,Hashset,我有一些关于JavaCollection对象的问题 当我们将对象添加到集合(如HashSet或HashMap)时,对象如何在内部存储 为什么Hashtable不允许null值 Hashtable不允许空值,因为它使用添加到它的对象的equals和hashcode方法 哈希表不允许空值,因为它使用添加到它的对象的equals和hashcode方法 您没有向集合中添加对象。您正在添加引用 至于为什么HashTable不允许null键和值,这只是一个设计决策;在某些情况下,禁止使用空键是有帮助的,而在
Collection
对象的问题
HashSet
或HashMap
)时,对象如何在内部存储Hashtable
不允许null
值Hashtable不允许空值,因为它使用添加到它的对象的equals和hashcode方法
哈希表不允许空值,因为它使用添加到它的对象的equals和hashcode方法 您没有向集合中添加对象。您正在添加引用 至于为什么
HashTable
不允许null
键和值,这只是一个设计决策;在某些情况下,禁止使用空键是有帮助的,而在另一些情况下,这很烦人<例如,code>HashMap允许同时使用空键和值。禁止为空有多种原因:
- 通常,null键或null值表示调用代码中存在编程错误。在插入时拒绝此选项比等待代码获取一个值然后出现意外的空值更容易找到错误
- 如果您知道映射中的值不能为null,那么您不需要对包含进行单独的检查,然后再进行fetch:您可以进行fetch,如果结果为null,您就知道密钥丢失了
- 在map实现中处理null键需要更多的工作。虽然空值有时可能有用,但空键几乎永远不会有用
- 您没有将对象添加到集合中。您正在添加引用
至于为什么
HashTable
不允许null
键和值,这只是一个设计决策;在某些情况下,禁止使用空键是有帮助的,而在另一些情况下,这很烦人<例如,code>HashMap允许同时使用空键和值。禁止为空有多种原因:
- 通常,null键或null值表示调用代码中存在编程错误。在插入时拒绝此选项比等待代码获取一个值然后出现意外的空值更容易找到错误
- 如果您知道映射中的值不能为null,那么您不需要对包含进行单独的检查,然后再进行fetch:您可以进行fetch,如果结果为null,您就知道密钥丢失了
- 在map实现中处理null键需要更多的工作。虽然空值有时可能有用,但空键几乎永远不会有用
null
。当然,所有的空值都是相等的,所有的东西都是…@LouisWasserman如果一个映射支持空值,那么它最多可以为map.get(null)
提供一个不同的结果,直到下一次调用map.put(null,value)
。因此,我声明在任何给定时间只有一个引用(值)映射到null(键)。@corsiKa:当然-尽管我不确定这有多大帮助。提到它有什么特别的原因吗?需要明确的是,不允许使用空键或值的一个流行原因是因为它们经常代表使用它们的程序中的逻辑错误。例如,Guava对Google的代码库进行了一项研究,该研究表明95%的集合从来没有空值(拒绝空值有助于用户调试),5%的集合需要空值(这种情况通常有一种解决方法)。可以公平地说空值键是单数的吗,因为在任何给定的时间只有一个引用可以映射到null?呃?您可以随意引用null
。当然,所有的空值都是相等的,所有的东西都是…@LouisWasserman如果一个映射支持空值,那么它最多可以为map.get(null)
提供一个不同的结果,直到下一次调用map.put(null,value)
。因此,我声明在任何给定时间只有一个引用(值)映射到null(键)。@corsiKa:当然-尽管我不确定这有多大帮助。提到它有什么特别的原因吗?