我想知道的原因是,在整个商店搜索允许您指定自己的等于/哈希码函数的 LinkedHashMap/LinkedHashSet 的实现之后,我找不到一个。
我发现有几个库只为 HashMap 实现了这一点,还有一个承诺在未来的某个时候为 LinkedHashMap 实现它,但仍然没有。
所以我决定只修改HM源并自己做,然后再实现LHM。
如果我可以窃取此代码的预先存在的测试类,然后添加/修改它们,那就太酷了。因此这个问题。
如果您正在寻找Map
测试,您可能会比Guava 的 MapTestSuiteBuilder做得更差。您还可以在包中找到SetTestSuiteBuilder和其他方便的工具来测试与其相邻的集合,以及附近的方便的EqualsTester 。(有关如何使用测试的示例,请参见 Louis 的链接。)
您也可以考虑制定一个LinkedHashMap
恰好包含 GuavaEquivalence.Wrapper
类型对象的标准。基本上,您创建一个Equivalence
包含您自己设计的equals
andhashCode
方法的实现,然后使用它为您希望保留在 set/map 中的每个对象创建轻量级包装器。包装器上的equals
andhashCode
将使您的Set
/Map
行为保持您想要的方式,然后您可以打开实例以供以后使用。
(当然,您也可以跳过 Guava 并编写一个单字段包装器对象来实现equals
and hashCode
,但 Guava 已经为您编写了一个。)