4

我希望两个相同的转换产生具有相同hashCode. 我想使用这个属性来检查我的对象是否以有意义的方式发生了变化。

不幸的是,Guava 的TransformedCollection extends AbstractCollectionwhich ( 不像AbstractList) 没有实现hashCode或等于,TransformedCollection也没有这样的尝试。

  • 我们不能根据hashCode迭代器的顺序或类似的返回值来计算 a 吗?
  • 或者那仍然不能保证相同hashCodes
  • 也许我们可以以某种无法解决TransformedCollection的方式解决这个问题AbstractCollection
4

1 回答 1

11

不幸的是,没有明智的方法来定义Collection.hashCode. 集合可以是 aSet或 a List(或其他东西),并且两者hashCode以不兼容的方式定义。

此外,出于同样的原因,对于 transformedCollection1.equals(transformedCollection2). 它可以忽略顺序,也可以不忽略(Set 或 List 语义)。更糟糕的是,返回Collection的只是一个视图,这equals将是非常低效的。

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

于 2012-08-23T14:51:39.570 回答