IIUC 相同类型的两个不同对象可以存储在 HashSet 中,即使两个对象在以下情况下返回相同的值:hashCode()
叫做。例如根据本文 https://eclipsesource.com/blogs/2012/09/04/the-3-things-you-should-know-about-hashcode/“Aa”和“BB”返回相同的值hashcode
(2112),但显然我可以把这两个字符串放在一个HashSet
它们都将包含在Set
没有“Aa”覆盖“BB”。
那么主要目的也是如此hashCode()
使在 Set 或一般集合中查找实例更快?这是否也意味着如果我们返回一个常量hashCode()
这会降低存储此类对象的集合的性能(在例如,此链接文章建议的 JPA 上下文 https://vladmihalcea.com/how-to-implement-equals-and-hashcode-using-the-jpa-entity-identifier/)?
是的。
任何基于存储桶的算法的基础都是您希望将元素均匀分布在 N 个存储桶中,其中N << |all elements|
。
拥有恒定的 hashCode 会强制所有元素放入同一个存储桶中,从而减少所有查找/包含操作仅使用底层(每个存储桶)结构(可以是列表或类似结构)运行。
See https://en.wikipedia.org/wiki/Hash_table#Choosing_a_hash_function https://en.wikipedia.org/wiki/Hash_table#Choosing_a_hash_function用于一般解释。现在JavaHashSet
只是支持HashMap
(来自 Javadoc)(https://en.wikipedia.org/wiki/Hash_table#Sets https://en.wikipedia.org/wiki/Hash_table#Sets).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)