为什么String、Integer和其他包装类被认为是好的键?
我找到了以下答案-
String,Integer和其他包装类是HashMap键的自然候选者,String也是最常用的键,因为String是不可变的和最终的,并且覆盖了equals和hashcode()方法。
其他包装器类也共享类似的属性。为了防止用于计算hashCode()的字段发生变化,需要不变性,因为如果键对象在插入和检索期间返回不同的hashCode,那么就不可能从HashMap中获取对象。不变性是最好的,因为它还提供了其他优点,比如线程安全,如果你可以通过只将某些字段设为final来保持hashCode不变,那么你也可以这样做。由于在从HashMap检索值对象的过程中使用了equals()和hashCode()方法,因此键对象正确地覆盖这些方法并跟随contact非常重要。如果不相等对象返回不同的哈希码,则冲突的机会将较小,这随后提高了HashMap的性能。
发布于 2014-06-06 00:27:42
在大多数Map实现中,条目是基于键的状态存储的。如果密钥发生更改,则无法在给定密钥的情况下检索条目。
HashMap处理键的hashCode()值。如果键hashCode()值是从不可变状态生成的,那么它将是常量。由于这些类型是不可变的,它们的(外部)属性也是不可变的,并且它们的hashCode()是从这些属性中生成的,所以这些类型的键不能更改,因此这个问题就不成问题了。
发布于 2014-06-06 00:45:29
我认为有以下原因:
对于“包装器类”也是如此。
https://stackoverflow.com/questions/24065434
复制相似问题