2012-08-23 2 views
4

동일한 hashCode을 가진 결과 개체에 대해 동일한 변환이 두 번 발생할 것으로 예상됩니다. 내 개체가 의미있는 방식으로 변경되었는지 여부를 확인하려면이 속성을 사용하고 싶습니다. 구아바의 TransformedCollection extends AbstractCollection이 (AbstractList 달리) hashCode를 구현하거나 동일하지 않습니다 불행하게도 TransformedCollection이 hashCode를 구현하지 않는 이유는 무엇입니까?

, 및 TransformedCollection는 그러한 시도 자체를하지 않습니다.

  • 반복자의 순서 또는 그 중 일부가 반환 한 값을 기준으로 hashCode을 계산할 수 있습니까?
  • 그래도 동일하다고 보장하지 않겠습니까? hashCodes?
  • AbstractCollection에 대해 해결할 수없는 방식으로 TransformedCollection에 대한이 문제를 해결할 수 있을까요?

답변

11

불행히도, Collection.hashCode을 정의하는 정상적인 방법은 없습니다. 컬렉션은 Set 또는 List (또는 다른 것) 일 수 있으며 두 가지는 호환되지 않는 방식으로 hashCode을 정의합니다.

또한 동일한 이유로 transformedCollection1.equals(transformedCollection2)에 대한 정의가 없습니다. 그것은 순서를 무시할 수도 있고, 그렇지 않을 수도 있습니다 (Set 또는 List semantics). 더 나쁜 것은 반환 된 Collection은보기에 불과하며 equals은 비효율적입니다.

나는 ImmutableList.copyOf(transformedCollection)과 같은 것을 사용하고 함께 사용하도록 제안합니다.

+3

또는'List'가 있으면'Lists.transform'을 사용하십시오. –

관련 문제