gpt4 book ai didi

java - 如何在Java中迭代和更改优先级队列中每个项目的值

转载 作者:行者123 更新时间:2023-12-01 06:50:58 25 4
gpt4 key购买 nike

在java中,我想将优先级队列中每个元素的值减1。

这是我尝试过的一些代码示例:

// more code

PriorityQueue<Integer> q = new PriorityQueue<Integer>(size, Collections.reverseOrder());

// code that adds items to q

for (Integer item: q) {
item--;
}

但是,它似乎根本没有改变优先级队列项目。如何修复此代码以使其达到我的预期目的?

谢谢!

最佳答案

首先您需要了解为什么它不改变 item 的值。原因是 Integer 是一个不可变类,这意味着一旦为类实例分配了一个值 (int),它就不会改变。您可以修改循环语句以创建一个具有递减值的新 Integer 或使用 AtomicInteger 类及其 getAndDecrement 方法。然而后者有一些同步开销。

使用代码示例进行更新

PriorityQueue<AtomicInteger> q = new PriorityQueue<AtomicInteger>(size,  Collections.reverseOrder());

// code that adds items to q
for (AtomicInteger item: q) {
item.getAndDecrement();
}

关于java - 如何在Java中迭代和更改优先级队列中每个项目的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29581528/

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