关于收集框架

0 java collections hashtable hashmap hashset

我对Java Collection对象有一些疑问......

  1. 当我们将对象添加到集合中时,HashSet或者HashMap如何在内部存储对象?
  2. 为什么Hashtable不允许null值?

Jon*_*eet 6

您没有将对象添加到集合中.你正在添加一个参考.

至于为什么HashTable不允许null键和值 - 这只是一个设计决定; 在某些情况下,禁用null键是有帮助的,而在其他情况下,它很烦人.HashMap 例如,允许空键和值.禁止null的原因有很多:

  • 通常,空键空值表示调用代码中的编程错误.在插入点拒绝此操作使得查找错误比等待代码获取值然后具有意外的null 更容易.

  • 如果你知道 map中的值不能为null,那么你不需要单独检查包含然后获取:你可以获取,如果结果为null,你就知道密钥丢失了.

  • 在map实现中处理null键需要更多的工作.虽然null值有时可能有用,但null键几乎从不.

  • 需要明确的是,禁止空键或值的一个流行原因是因为它们经常在使用它们的程序中表示逻辑错误.例如,Guava对谷歌的代码库进行了一项研究,该研究表明95%的集合从不具有空值(并且拒绝空值可以帮助那些用户调试),并且5%的集合需要空值(并且通常有针对该情况的解决方法). (2认同)