为什么String和包装类在哈希表中作为键有效?

时间:2012-07-29 00:09:09

标签: java oop hashtable

为什么它更喜欢使用表示哈希表中特定对象的字符串和包装器而不是使用实际对象本身?

1 个答案:

答案 0 :(得分:4)

这个问题有点模糊,但也许这会有所帮助:

  • 密钥必须是不可变的。 String(Integer,Long)非常适合。 (当然,如果您稍后将对象更改为不再与键匹配,则无效)。

  • 密钥必须实现hashCode / equals合约。 String(Integer,Long)已经这样做了。

  • 您可以按键查找,而无需创建自定义对象的实例。

因此,如果您键入自定义对象的属性或计算值,则使用“原始”内置类来表示该派生值是方便(且安全)的。

事实上,使用哈希表的自定义类很少是必要或可取的,你可以使用字符串,整数和长整数覆盖几乎所有东西(常见的例外:元组,Java没有良好的内置类,并且数组不能作为散列键使用。)