gpt4 book ai didi

Java PriorityQueue 似乎在调用 add() 时更改了之前添加的值

转载 作者:行者123 更新时间:2023-11-30 05:18:16 28 4
gpt4 key购买 nike

我很困惑,因为我正在使用的优先级队列似乎在添加新值时更改或重新排序了循环中先前添加的值。到目前为止,这只发生在这个测试用例中。

以下是我的调试器的一些片段:

添加第六个元素之前:

enter image description here

添加第 6 个元素后:

enter image description here

代码示例如下:

package mixedobjectsset;

import java.util.PriorityQueue;
import java.util.Queue;

public class MixedObjectsSet {

private static final char union = '\u222A';
private static final char intersection = '\u2229';
private static final char product = '\u2A2F';
private static final char difference = '\u2216';


public static void main(String[] args) {
MixedObjectsSet m = new MixedObjectsSet();
m.operatorsQueue("(({1,2}" + difference + "{1,3})" +
difference + "({1 } " + union + "{4})) " + union + "{1,3}");
}

public Queue operatorsQueue(String expr){

Queue<Character> queue = new PriorityQueue<>();
char[] exprCharArr = expr.toCharArray();

for (int j = 0; j < exprCharArr.length; j++) {
switch (exprCharArr[j]){
case '(':
queue.add('(');
break;
case ')':
queue.add(')');
break;
case '\u222A':
queue.add(union);
break;
case '\u2216':
queue.add(difference);
break;
case '\u2A2F':
queue.add(product);
break;
case '\u2229':
queue.add(intersection);
break;
case ';':
queue.add(';'); //for adding to storage instead of calculations
break;
}
}


System.out.println("queue.toString() = " + queue.toString());

return queue;


}
}

最佳答案

PriorityQueue 实现中的

Array queue 不会按照从队列中轮询的顺序存储元素。 PriorityQueuebinary heap ,并且堆存储在 queue 数组中,如所述 here 。这意味着您不应该查看队列数组(除非您知道二进制堆的确切工作原理),因为它是一个封装的实现细节,它执行与您可能执行的操作不同的操作。从它的名字就可以看出。

关于Java PriorityQueue 似乎在调用 add() 时更改了之前添加的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59997894/

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