如何根据每个Java队列的内容值判断两个Java队列是否相等?

如何根据每个Java队列的内容值判断两个Java队列是否相等?,java,collections,equals,Java,Collections,Equals,我想实现一个equals覆盖,它根据两个Java队列对象的内容相等(按值)来比较它们 我可能会拼凑一些代码,但肯定有人已经优雅地解决了这个问题。谷歌搜索没有显示任何结果,所以我下一个来到这里 我感谢你的建议。我也需要对ArrayList和HashMap集合做同样的事情 顺便说一句,对于equals(),我将此作为指南: 它给出了一些提示,但显然我需要更多的帮助,当涉及到收集。集合中包含的类型将根据该链接的建议覆盖equals()。java.util.Queue的JavaDoc已经说明了问题: 队

我想实现一个equals覆盖,它根据两个Java队列对象的内容相等(按值)来比较它们

我可能会拼凑一些代码,但肯定有人已经优雅地解决了这个问题。谷歌搜索没有显示任何结果,所以我下一个来到这里

我感谢你的建议。我也需要对ArrayList和HashMap集合做同样的事情

顺便说一句,对于equals(),我将此作为指南:


它给出了一些提示,但显然我需要更多的帮助,当涉及到收集。集合中包含的类型将根据该链接的建议覆盖equals()。

java.util.Queue的JavaDoc已经说明了问题:

队列实现通常不定义方法equals和hashCode的基于元素的版本,而是从类对象继承基于标识的版本,因为对于具有相同元素但不同排序属性的队列,基于元素的相等并不总是定义良好的

因此,如果您想基于所包含的对象来实现逻辑,您需要为您的用例实现自己的逻辑(或者重用一些库)

例如,对于ArrayList,只需调用
ArrayList.equals()


对于队列,我会采用一种实用的方法,使用java.util.concurrent.LinkedBlockingQueue.toArray()将它们转换为数组,然后使用
Arrays.equals(Queue1Aarray,Queue2array)

这是家庭作业吗?如果没有,你是怎么做到的?哈哈。我的问题真的那么糟糕吗?这是一个已经失学多年的人提出的一个真正的问题@SB-显然,这并不像你想的那么简单。见mhaller的答复。我现在问这个问题并不觉得很糟糕我不是故意暗示这是个糟糕的问题。但接受的答案只是在ArrayList上使用.equals,然后使用Arrays.equals(链接中有一个例子)并在队列中引用JavaDocs。如果这个问题不好,它就会被社区关闭。在这里问任何问题都不要难过,谢谢。我没有得到队列containsAll的预期结果,因此我将尝试您的建议。此外,我似乎在比较日期方面有困难。下面是我用来比较日期的代码:(this.timestamp.compareTo(that.timestamp)==0)。它给出了意外的结果:时间戳:2010年11月16日星期二19:05:53 EST==2010年11月16日星期二19:05:53 EST:False日期比较问题是由于序列化/反序列化后的精度损失。现在已经解决了(通过比较日期字符串)。您提出的array.equals()建议正在发挥作用。谢谢你,而不是比较日期字符串,考虑比较低分辨率(例如,比较后,降低X低阶位),或使用日历对象(寒颤)。字符串中的日期很少是可行的。也就是说,我很惊讶序列化会导致精度损失(除非您以某种方式自定义长字符串的序列化)