java - 为什么 TransformedCollection 没有实现 hashCode?

标签 java collections guava

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

不幸的是,Guava 的 TransformedCollection extends AbstractCollection(与 AbstractList 不同)没有实现 hashCode 或 equals,以及 TransformedCollection 本身不做这样的尝试。

  • 难道我们不能根据迭代器的顺序或类似的返回值来计算一个hashCode吗?
  • 还是不能保证相同的hashCodes
  • 也许我们可以用 AbstractCollection 无法解决的方式为 TransformedCollection 解决这个问题?

最佳答案

不幸的是,没有定义 Collection.hashCode 的合理方法。集合可以是 SetList(或其他),两者以不兼容的方式定义 hashCode

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

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

关于java - 为什么 TransformedCollection 没有实现 hashCode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12094202/

相关文章:

MongoDB |如何只显示非空集合?

java - 再次解析List<Map<String,String>> String形式为POJO

java - 为什么没有Optional.or(Optional default)方法?

java - Guava 前提条件检查,空列表

java - 基于谓词的计划内存缓存失效

java - 如何处理更新 Google App Engine 上的 JDO 类定义

java - JUnit4 fail() 在这里,但是 pass() 在哪里?

java - 在代码中获取 java.util.NoSuchElementException。为什么?

java - 如何验证具有不同属性要求不同方法调用的spring模型对象?

java - SKIP_SIBLINGS 和 SKIP_SUBTREE 之间的区别