gpt4 book ai didi

JAVA - 优先级队列比较双降序

转载 作者:行者123 更新时间:2023-12-02 05:34:46 26 4
gpt4 key购买 nike

我有一个 worker 类(Class),可以按升序排序,但如果我改变逻辑,我的结果就不是我所期望的。也许我不明白比较器是如何工作的。如果我使用轮询打印我的队列,那么我会丢失该数据。如何打印出来而不丢失数据?目前我创建了一个临时队列并重新插入到旧队列中。

public class Example
{
private static Logger log = LogClass.getLog();

private PriorityQueue<Double> integerPriorityQueue;

void inputIntoQueue(Collection<Double> queueNumbers)
{
Comparator<Double> comparator = new DoubleComparator();
integerPriorityQueue = new PriorityQueue<Double>(comparator);
integerPriorityQueue.addAll(queueNumbers);

Iterator<Double> it = integerPriorityQueue.iterator();

log.trace("Priority queue values are: ");

while (it.hasNext())
{
log.trace( it.next());
}
}
}

class DoubleComparator implements Comparator<Double>
{

@Override
public int compare(Double arg0, Double arg1)
{
if (arg1 < arg0)
{
return -1;
}
if ( arg1 > arg0 )
{
return 1;
}
return 0;
}
}

更新我的代码

public class Example
{
private static Logger log = LogClass.getLog();
private DoubleComparatorDescending comparator = new DoubleComparatorDescending();
private PriorityQueue<Double> doublePriorityQueue = new PriorityQueue<Double>(
comparator);
private PriorityQueue<Double> tempQueue = new PriorityQueue<Double>(
comparator);

public PriorityQueue<Double> getDoublePriorityQueue()
{
return doublePriorityQueue;
}


void inputIntoQueue(Collection<Double> queueNumbers)
{
doublePriorityQueue.addAll(queueNumbers);
printQueue(doublePriorityQueue);
}

private void printQueue(PriorityQueue<Double> integerPriorityQueue2)
{
log.trace("Priority queue values are: ");

while (doublePriorityQueue.size() > 0)
{
Double tempDouble = doublePriorityQueue.poll();
log.trace(tempDouble);
tempQueue.add(tempDouble);
}
doublePriorityQueue = tempQueue;
}
}

class DoubleComparatorDescending implements Comparator<Double>
{
@Override
public int compare(Double arg0, Double arg1)
{
if (arg1 < arg0)
{
return -1;
}
if (arg1 > arg0)
{
return 1;
}
return 0;
}
}

最佳答案

PriorityQueue 迭代器返回的元素不使用队列的顺序进行排序。

The javadoc说:

The Iterator provided in method iterator() is not guaranteed to traverse the elements of the priority queue in any particular order.

唯一的保证是由 peek()poll() 返回的队列的是所有队列中最小的一个队列中的元素。

如果您想要排序的集合,请使用您排序的 TreeSet 或 List。

关于JAVA - 优先级队列比较双降序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25106193/

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