【发布时间】:2023-02-05 06:27:42
【问题描述】:
很抱歉,如果这是一个愚蠢的问题(特别是对于使用 Java 开发超过 4 年的人)或者是否已经回答(我已经搜索过堆栈溢出,尽管问题很简单,但我找不到重复)但我创建了两个优先级队列并想检查它们是否以完全相同的顺序包含完全相同的元素。但是,当我在两个看似相等的优先级队列上调用 .equals() 时,我返回了 false。我希望从直接比较 (==) 中得到这么多,而不是从 .equals() 方法中得到。我看过 java 文档,但他们没有对此行为提供解释。
为了测试这种行为,我运行了以下代码段:
PriorityQueue<Character> window = new PriorityQueue<>();
PriorityQueue<Character> base = new PriorityQueue<>();
System.out.println(window.equals(base));
System.out.println(base.equals(base));
window.offer('a');
window.offer('b');
base.offer('a');
base.offer('b');
System.out.println(window.equals(base));
输出是:
false
true
false
但是,我预计:
true
true
true
我之前已经覆盖了 equals 方法,所以如果这是我必须做的事情,我可以处理,但我对结果感到非常吃惊。我知道我可以将我的 PriorityQueue 转换为字符串或数组,然后比较它们,但这破坏了使用 PriorityQueue 的全部意义(更不用说它将占用的所有多余空间)。
【问题讨论】:
标签: java equals priority-queue hashcode