gpt4 book ai didi

java - peek() 或不 peek()

转载 作者:行者123 更新时间:2023-12-02 03:48:18 29 4
gpt4 key购买 nike

我有 PriorityQueue 使用示例,它产生

3

1

1

1

5

0

这是代码

import java.util.*;

class Someclass
{

public static class IntegerWr
implements Comparable<IntegerWr>
{
Integer val;

IntegerWr(Integer val)
{
this.val = val;
}

public void change(Integer nval)
{
this.val = nval;
}

@Override
public int compareTo(IntegerWr iw)
{
return val.compareTo(iw.val);
}
@Override public String toString()
{
return ""+val;
}
}
public static void main (String[] args)
{
PriorityQueue<IntegerWr> pq = new PriorityQueue<>();
pq.add(new IntegerWr(3));
System.out.println(pq.peek());
IntegerWr iw1 = new IntegerWr(1);
pq.add(iw1);
System.out.println(pq.peek());
pq.add(new IntegerWr(4));
System.out.println(pq.peek());
pq.add(new IntegerWr(2));
System.out.println(pq.peek()); //must output 1, and does so
iw1.change(5); //change value of element that is actually on peek
System.out.println(pq.peek()); //outputs 5 which is unexpected
pq.add(new IntegerWr(0));
System.out.println(pq.peek());
}
}

似乎 PriorityQueue 仅在插入时排序。使用什么方法来获取实际的 peek()?

最佳答案

您正在更改队列中存储的对象内部的值。队列对对象的内容一无所知。因此,当您调用队列中对象的方法时(如“iw1.change(5)”),队列中的任何内容都不会知道它。您需要存储一个替换对象,以便队列对元素重新排序。

关于java - peek() 或不 peek(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36130720/

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