gpt4 book ai didi

java - 如何从优先级队列中删除特定元素?

转载 作者:太空宇宙 更新时间:2023-11-04 08:23:04 31 4
gpt4 key购买 nike

我已经使用 Java API 创建了一个优先级队列,并且我想在程序结束时从优先级队列中删除特定元素。我知道它必须与比较器做一些事情,但我无法弄清楚。有人可以帮忙吗?这是我的代码:

public static void main(String[] args)
{
PriorityQueue<Element> X = new PriorityQueue<Element>(100, new ElementComparator());
X.add(new Element(30, 3));
X.add(new Element(700, 4.5));
X.add(new Element(100, 6.2));
X.add(new Element(2, 8.1));
System.out.println(X.remove(new Element(100, 6.2)));
}

这是我的 Element 类:

private int index;
private double value;

public Element(int i, double v)
{
index = i;
value = v;
}

public int getIndex() { return index;};
public double getValue() { return value;};
public void setValue(double v) { value = v;};

这是我创建的比较器:

public int compare(Element o1, Element o2)
{
int idx1 = o1.getIndex();
int idx2 = o2.getIndex();
if (idx1 < idx2) {
return -1;
} else if (idx1 > idx2) {
return 1;
} else {
return 0;
}
}

public boolean equals(Element o1, Element o2)
{
return o1.getIndex() == o2.getIndex();
}

感谢您的帮助...

最佳答案

您需要在 Element 对象上定义 equals() 和 hashcode(),如下所示:

public class Element{
private int index;
private double value;

public Element(int i, double v)
{
index = i;
value = v;
}

public int getIndex() { return index;}
public double getValue() { return value;}
public void setValue(double v) { value = v;}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Element)) return false;

Element element = (Element) o;

if (index != element.index) return false;

return true;
}

@Override
public int hashCode() {
return index;
}
}

在 ElementComparator 上定义 equals() 不会执行相同的任务。

关于java - 如何从优先级队列中删除特定元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9154438/

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