在 "AbstractMap.SimpleEntry<>" 中覆盖 "equals()" 有什么意义吗? "equals()" 应该是最终的?
Any point to overriding "equals()" in "AbstractMap.SimpleEntry<>"? "equals()" should be final?
现在,我正在使用 guava collections,一切都很好,很开心。但是,我想了解为什么我自己的代码不起作用。我想我是在尝试做不可能的事情:
我创建了一个 SortedSet<Map.Entry<K, V>>
数据结构。错误是我有时会在 Set 中得到重复项。对我来说,"duplicate" Map.Entry 是它的键与另一个条目的键匹配的键。我想忽略计算相等性的价值。
但是,这里是 API:
AbstractMap.SimpleEntry : public boolean equals(Object o)
我想 "No. I don't want that." 我试图通过扩展它并覆盖 equals() 来让 SimpleEntry 屈服于我的意志,以便只使用键来决定相等性。
问题
让 AbstractMap.SimpleEntry 仅使用密钥来决定是否相等会产生 某种 几乎无法完全理解的连锁反应?
在 AbstractMap.SimpleEntry 中是否绝对有任何可能的理由来覆盖 equals()? javadoc 对决定平等的限制如此之大,不应该 equals() 只是 final ?
可以想象您可能会以某种更优化的方式实施equals
,例如如果您预先缓存密钥的哈希码。否则,是的,它应该被认为是最终的。 Map.Entry
合同的一部分是必须在键和值上测试相等性。
现在,我正在使用 guava collections,一切都很好,很开心。但是,我想了解为什么我自己的代码不起作用。我想我是在尝试做不可能的事情:
我创建了一个 SortedSet<Map.Entry<K, V>>
数据结构。错误是我有时会在 Set 中得到重复项。对我来说,"duplicate" Map.Entry 是它的键与另一个条目的键匹配的键。我想忽略计算相等性的价值。
但是,这里是 API:
AbstractMap.SimpleEntry : public boolean equals(Object o)
我想 "No. I don't want that." 我试图通过扩展它并覆盖 equals() 来让 SimpleEntry 屈服于我的意志,以便只使用键来决定相等性。
问题
让 AbstractMap.SimpleEntry 仅使用密钥来决定是否相等会产生 某种 几乎无法完全理解的连锁反应?
在 AbstractMap.SimpleEntry 中是否绝对有任何可能的理由来覆盖 equals()? javadoc 对决定平等的限制如此之大,不应该 equals() 只是 final ?
可以想象您可能会以某种更优化的方式实施equals
,例如如果您预先缓存密钥的哈希码。否则,是的,它应该被认为是最终的。 Map.Entry
合同的一部分是必须在键和值上测试相等性。