2012-08-23 30 views
4

我期待兩個相同的變換結果對象具有相同的hashCode。我想用這個屬性來檢查我的對象是否以有意義的方式發生了變化。爲什麼TransformedCollection不實現hashCode?

不幸的是,番石榴的TransformedCollection extends AbstractCollection(不同於AbstractList)不執行hashCode或等於和TransformedCollection確實沒有這樣的嘗試本身。

  • 難道我們不能計算hashCode根據迭代器的順序或某些這樣的返回的值嗎?
  • 或仍然不能保證相同hashCodes
  • 也許我們可以通過AbstractCollection無法解決的方式解決TransformedCollection這個問題?

回答

11

不幸的是,沒有明確的方法來定義Collection.hashCode。集合可以是SetList(或其他),並且這兩個以不兼容的方式定義hashCode

此外,出於同樣的原因,transformedCollection1.equals(transformedCollection2)沒有理智的定義。它可以忽略該命令,也可以不設置(Set或List semantics)。更糟糕的是,返回的Collection只是一個觀點,而這樣的equals將是非常低效的。

我建議使用類似ImmutableList.copyOf(transformedCollection)的東西,並與它一起工作。

+3

或者如果你有'List',使用'Lists.transform'。 –

相關問題