为什么ClassUtils在其字段中使用'IdentityHashMap'而不是'HashMap'(Spring框架)?

oalqel3c  于 2022-12-10  发布在  Spring
关注(0)|答案(1)|浏览(90)

为什么类ClassUtils(org.springframework.util.ClassUtils)的primitiveWrapperTypeMap字段使用IdentityHashMap而不是HashMapClass<T> Object是单例的,equals()对于其他类总是false,在HashMap中键也没有被覆盖,为什么使用IdentityHashMap而不是HashMap

wmtdaxz3

wmtdaxz31#

我想IdentityHashMap用于更好的性能。我将尝试简要解释它。
在典型的Map实现中,equals()被用来比较键(当你访问/放置/搜索键时),因为Map接口必须这样做。
但是IdentityHashMap类违反了这些规则。根据文档,这是一个简单的线性探测哈希表,具有以下特点:

  • 它对关键字搜索操作使用引用等式(==),
  • 它在搜索操作期间使用System.identityHashCode()方法。

所有这些“技巧”让IdentityHashMap表现出更好的性能。
如果你看一下代码,primitiveWrapperTypeMap被用在static块中,并且它被填充了<Integer.class, int.class>等值。所以,这个字段只在类内部使用,并且在类外部是不可变的。这就是为什么使用IdentityHashMap是安全的。

相关问题