我希望对具有相同 hashCode
的结果对象进行两次相同的转换。我想使用这个属性来检查我的对象是否以有意义的方式发生了变化。
不幸的是,Guava 的 TransformedCollection extends AbstractCollection
(与 AbstractList
不同)没有实现 hashCode
或 equals,以及 TransformedCollection
本身不做这样的尝试。
- 难道我们不能根据迭代器的顺序或类似的返回值来计算一个
hashCode
吗? - 还是不能保证相同的
hashCodes
? - 也许我们可以用
AbstractCollection
无法解决的方式为TransformedCollection
解决这个问题?
最佳答案
不幸的是,没有定义 Collection.hashCode
的合理方法。集合可以是 Set
或 List
(或其他),两者以不兼容的方式定义 hashCode
。
此外,出于同样的原因,transformedCollection1.equals(transformedCollection2)
没有合理的定义。它可以忽略顺序,也可以不忽略(Set 或 List 语义)。更糟糕的是,返回的 Collection
只是一个 View ,这样的 equals
会非常低效。
我建议使用类似 ImmutableList.copyOf(transformedCollection)
的东西并使用它。
关于java - 为什么 TransformedCollection 没有实现 hashCode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12094202/