我正在尝试使用优先级队列中的数据创建表模型。 问题是 - 当我写“偷看”时,它显然总是检索队列的顶部, 但是当我写“民意调查”时,表格根本没有显示任何数据,我不明白为什么, 也许有人有想法?
数据结构:
/**
* date
*/
private Queue<Entry<Flight,Double>> data=new PriorityQueue<Entry<Flight,Double>>();
方法的获取值:
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if(!data.isEmpty()){
Entry<Flight,Double> e=data.poll();
switch(columnIndex)
{
case 0:
return e.getKey().getFlightNumber();
case 1:
return e.getKey().getFlightDateAndTimeSource();
case 2:
return e.getKey().getFlightDateAndTimeDestination();
case 3:
return e.getKey().getSource();
case 4:
return e.getKey().getDestination();
case 5:
return e.getKey().getFlightCost();
case 6:
return e.getKey().getAirplane();
case 7:
return e.getValue();
default: return -1;
}
}
else
return " ";
}
我通过调试检查,数据不为空。它也适用于偷看。
提前谢谢!
答案 0 :(得分:0)
在这种情况下,Queue
的问题在于它不能被设计为多次遍历。我建议切换到排序List
。我认为正在发生的事情是它被绘制一次会清空Queue
并且任何后续刷新,重绘或重新排序都会看到空Queue
答案 1 :(得分:0)
如果不讨论这种结构的意义,我建议它可能与您使用PriorityQueue
的方式有关。
在getValueAt
内,您可以使用peek
从队列中读取,但poll
会尝试修改它,这似乎是问题所在。
getValueAt
与private Queue<Entry<Flight,Double>> data
相同的是static
吗?
根据您访问/使用队列的方式,它可能会解决您的问题,并将其声明为{{1}}。
如果您提供更多的代码,那将非常有用。