首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么String、Integer和其他包装类在HashMap中被认为是很好的键?

为什么String、Integer和其他包装类在HashMap中被认为是很好的键?
EN

Stack Overflow用户
提问于 2014-06-06 00:26:28
回答 2查看 1.9K关注 0票数 1

为什么String、Integer和其他包装类被认为是好的键?

我找到了以下答案-

String,Integer和其他包装类是HashMap键的自然候选者,String也是最常用的键,因为String是不可变的和最终的,并且覆盖了equals和hashcode()方法。

其他包装器类也共享类似的属性。为了防止用于计算hashCode()的字段发生变化,需要不变性,因为如果键对象在插入和检索期间返回不同的hashCode,那么就不可能从HashMap中获取对象。不变性是最好的,因为它还提供了其他优点,比如线程安全,如果你可以通过只将某些字段设为final来保持hashCode不变,那么你也可以这样做。由于在从HashMap检索值对象的过程中使用了equals()和hashCode()方法,因此键对象正确地覆盖这些方法并跟随contact非常重要。如果不相等对象返回不同的哈希码,则冲突的机会将较小,这随后提高了HashMap的性能。

EN

回答 2

Stack Overflow用户

发布于 2014-06-06 00:27:42

在大多数Map实现中,条目是基于键的状态存储的。如果密钥发生更改,则无法在给定密钥的情况下检索条目。

HashMap处理键的hashCode()值。如果键hashCode()值是从不可变状态生成的,那么它将是常量。由于这些类型是不可变的,它们的(外部)属性也是不可变的,并且它们的hashCode()是从这些属性中生成的,所以这些类型的键不能更改,因此这个问题就不成问题了。

票数 1
EN

Stack Overflow用户

发布于 2014-06-06 00:45:29

我认为有以下原因:

  1. 字符串之所以有效,是因为它们是值对象,这意味着具有相同值的两个字符串将被视为相等。
  2. 字符串是不可变的(就像所有好的值对象一样)。
  3. 字符串具有高效和合理的良好hashCode实现。这意味着在HashMaps中使用它们是有效的。

对于“包装器类”也是如此。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24065434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档