gpt4 book ai didi

java - 在java中使用PriorityQueue.contains()的问题

转载 作者:行者123 更新时间:2023-12-01 23:04:15 25 4
gpt4 key购买 nike

我正在测试 Java 中 Min-PriorityQueue 的功能。我就是这样实现的。但在运行时, .contains() 对于对象返回 false,我相信该对象存在于数据结构中。有什么见解是哪里出了问题吗?

    public class NodeStruct implements Comparable<NodeStruct>{

public String FName;
public String LName;
public int age;

public NodeStruct(String fname, String lName, int age){
this.FName = fname;
this.LName = lName;
this.age = age;
}
@Override
public int compareTo(NodeStruct that) {
return (this.age - that.age);
}


public boolean equals(NodeStruct obj){
return (obj.age == this.age && obj.FName.equals(this.FName) && obj.LName.equals(this.LName));
}

public void print(){
System.out.println("FName, LName, age : " + this.FName + "," + this.LName + "," + this.age);
}

}



import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
public class Main
{

public static void main (String[] args) throws java.lang.Exception
{


PriorityQueue<NodeStruct> PQ = new PriorityQueue<NodeStruct>(5);

NodeStruct tmp = new NodeStruct("Harry", "Potter", 15);
PQ.offer(tmp);

tmp = new NodeStruct("Ron", "Weasley", 14);
PQ.offer(tmp);

tmp = new NodeStruct("Hermione", "Granger", 16);
PQ.offer(tmp);



boolean isPresent = PQ.contains(new NodeStruct("Ron", "Weasley", 14));

System.out.println("Is Present : " + isPresent);

NodeStruct tmp2 = PQ.peek();
tmp2.print();


}

}

输出显示:

          Is Present : false
FName, LName, age : Ron,Weasley,14

最佳答案

您应该使用 Object 参数显式重写 equals() 方法。您的 equals() 方法不是 Object#equals() 的重写版本,它是重载版本。 Java 集合在其操作上调用 equals() ,并且在您的情况下调用 super.equals() ,而不是您的实现。

编辑:

现在,除了签名之外,我还检查了您的 equals() 实现。使用 equals() 比较字符串字段,而不是 == 运算符。

关于java - 在java中使用PriorityQueue.contains()的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23034212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com