为什么类ClassUtils(org.springframework.util.ClassUtils)的primitiveWrapperTypeMap字段使用IdentityHashMap而不是HashMap?Class<T> Object是单例的,equals()对于其他类总是false,在HashMap中键也没有被覆盖,为什么使用IdentityHashMap而不是HashMap?
ClassUtils
primitiveWrapperTypeMap
IdentityHashMap
HashMap
Class<T> Object
equals()
wmtdaxz31#
我想IdentityHashMap用于更好的性能。我将尝试简要解释它。在典型的Map实现中,equals()被用来比较键(当你访问/放置/搜索键时),因为Map接口必须这样做。但是IdentityHashMap类违反了这些规则。根据文档,这是一个简单的线性探测哈希表,具有以下特点:
Map
System.identityHashCode()
所有这些“技巧”让IdentityHashMap表现出更好的性能。如果你看一下代码,primitiveWrapperTypeMap被用在static块中,并且它被填充了<Integer.class, int.class>等值。所以,这个字段只在类内部使用,并且在类外部是不可变的。这就是为什么使用IdentityHashMap是安全的。
static
<Integer.class, int.class>
1条答案
按热度按时间wmtdaxz31#
我想
IdentityHashMap
用于更好的性能。我将尝试简要解释它。在典型的
Map
实现中,equals()
被用来比较键(当你访问/放置/搜索键时),因为Map
接口必须这样做。但是
IdentityHashMap
类违反了这些规则。根据文档,这是一个简单的线性探测哈希表,具有以下特点:System.identityHashCode()
方法。所有这些“技巧”让
IdentityHashMap
表现出更好的性能。如果你看一下代码,
primitiveWrapperTypeMap
被用在static
块中,并且它被填充了<Integer.class, int.class>
等值。所以,这个字段只在类内部使用,并且在类外部是不可变的。这就是为什么使用IdentityHashMap
是安全的。