我希望两个相同的变换到具有相同hashCode
的结果对象。我想使用这个属性检查我的对象是否有意义地改变了。
不幸的是,Guava的TransformedCollection extends AbstractCollection
(与AbstractList
不同)没有实现hashCode
或等于,TransformedCollection
本身没有这样的尝试。
hashCode
吗? hashCodes
? TransformedCollection
无法解决的方式为AbstractCollection
解决此问题?答案 0 :(得分:11)
不幸的是,没有明智的方法来定义Collection.hashCode
。一个集合可以是Set
或List
(或其他内容),两者可以不兼容的方式定义hashCode
。
此外,出于同样的原因,transformedCollection1.equals(transformedCollection2)
没有明确的定义。它可以忽略顺序,也可以不忽略(Set或List语义)。更糟糕的是,返回的Collection
只是一个视图,而equals
这样的效率会非常低效。
我建议使用类似ImmutableList.copyOf(transformedCollection)
的内容并使用它。