使用Java的DelayQueue时,我是否应该实现equals()和hashCode()?

And*_*son 1 java static-analysis findbugs

我正在处理一个使用a的类DelayQueue.我注意到,由于DelayQueue实现Delayed接口中的对象,所述对象也需要实现一个compareTo()已经完成的方法.

这是否隐含意味着我也应该考虑实施equals()方法和hashCode()方法?

我问的原因是因为我在通过FindBugs搜索项目时偶然发现了这个建议,而我正试图弄清楚这个特殊情况是否需要它.

Jef*_*hao 8

作为一种良好的做法,是的,因为equals,hashCodecompareTo具有密切的意义.它们可以被视为同一事物的不同方面.如果您在其他地方使用对象而未将它们一起实现,则可能会遇到不可预测的行为.

例如,您已将对象传递给使用二进制搜索算法的第三方库compareTo.几个月后,新版本的库改为基于散列的数据结构,以提高性能,继续使用equalshashCode.从他们的角度来看,这并没有打破变革.

在这种情况下,不,因为DelayQueue不使用它们.