【问题标题】:Why does TransformedCollection not implement hashCode?为什么 TransformedCollection 不实现 hashCode?
【发布时间】:2012-08-23 14:40:52
【问题描述】:

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

不幸的是,Guava 的TransformedCollection extends AbstractCollection(与AbstractList 不同)没有实现hashCode 或等于,而TransformedCollection 本身没有这样的尝试。

  • 我们不能根据迭代器的顺序或类似的返回值计算hashCode 吗?
  • 或者这仍然不能保证相同的hashCodes
  • 也许我们可以为TransformedCollection 解决这个问题,而这对于AbstractCollection 来说是无法解决的?

【问题讨论】:

    标签: java collections guava


    【解决方案1】:

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

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

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

    【讨论】:

    • 或者如果你有List,使用Lists.transform
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 2015-11-12
    • 1970-01-01
    • 2014-03-19
    • 2012-11-16
    • 2012-07-17
    • 2014-04-06
    相关资源
    最近更新 更多