【问题标题】:Any point to overriding "equals()" in "AbstractMap.SimpleEntry<>"? "equals()" should be final?在“AbstractMap.SimpleEntry<>”中覆盖“equals()”有什么意义吗? “equals()”应该是最终的?
【发布时间】:2015-03-24 18:23:44
【问题描述】:

现在,我正在使用番石榴系列,一切都很好,很开心。但是,我想了解为什么我自己的代码不起作用。我想我正在尝试做不可能的事情:

我创建了一个SortedSet&lt;Map.Entry&lt;K, V&gt;&gt; 数据结构。错误是我有时会在套装中得到重复。对我来说,“重复”的 Map.Entry 是其键与另一个条目的键匹配的键。我想忽略计算相等性的值。

但是,这里是 API:
AbstractMap.SimpleEntry : public boolean equals(Object o)

我当时想“不。我不想要那个。”我试图通过扩展 SimpleEntry 并覆盖 equals() 来使 SimpleEntry 符合我的意愿,以便仅使用键来决定相等性。

问题
让 AbstractMap.SimpleEntry 只使用决定相等性的键有某种几乎不可能完全理解的连锁反应?

在 AbstractMap.SimpleEntry 中是否有任何可能的理由重写 equals()? javadoc 在决定相等性方面是如此严格,不应该将 equals() 设为 final 吗?

【问题讨论】:

  • 我们可以看看你实现的 equals() 方法吗?
  • @jaco0646 不。我继续使用番石榴 TreeMultiset。 SortedSet> 代码早已不复存在。但是,它确实存在于我的噩梦中。我确实学到了很多,现在我已经结束了。

标签: java collections overriding


【解决方案1】:

可以想象您可以以某种更优化的方式实现equals,例如,如果您预先缓存了密钥的哈希码。否则,是的,它应该被认为是最终的。 Map.Entry 合约的一部分必须在 key 和 value 上测试相等性。

【讨论】:

  • 继续研究番石榴库,这样像我这样的白痴就不会在基本数据结构上浪费时间。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
  • 2012-07-11
  • 1970-01-01
  • 1970-01-01
  • 2016-05-23
  • 2013-07-05
相关资源
最近更新 更多