我希望对具有相同 hashCode 的结果对象进行两个相同的转换。我想使用这个属性来检查我的对象是否以有意义的方式改变了。

不幸的是, Guava 的 TransformedCollection extends AbstractCollection (与 AbstractList 不同)没有实现 hashCode 或 equals,并且 TransformedCollection 本身没有这样的尝试。

  • 难道我们不能根据迭代器的顺序或类似的返回值来计算 hashCode 吗?
  • 或者这仍然不能保证相同的 hashCodes
  • 也许我们可以用 TransformedCollection 无法解决的方式为 AbstractCollection 解决这个问题?
  • 最佳答案

    不幸的是,没有定义 Collection.hashCode 的合理方法。集合可以是 SetList(或其他东西),两者以不兼容的方式定义 hashCode

    此外,出于同样的原因, transformedCollection1.equals(transformedCollection2) 没有合理的定义。它可以忽略顺序,也可以不忽略(设置或列表语义)。更糟糕的是,返回的 Collection 只是一个 View ,这样的 equals 会非常低效。

    我建议使用类似 ImmutableList.copyOf(transformedCollection) 的东西并使用它。

    10-07 13:12
    查看更多