Java优先级队列查询和轮询
我试图用优先级队列中的数据创建一个表模型。 问题是-当我写“peek”时,显然它总是检索队列的顶部, 但是当我写“poll”的时候,表格根本没有显示任何数据,我不明白为什么, 也许有人有主意 数据结构:Java优先级队列查询和轮询,java,user-interface,priority-queue,Java,User Interface,Priority Queue,我试图用优先级队列中的数据创建一个表模型。 问题是-当我写“peek”时,显然它总是检索队列的顶部, 但是当我写“poll”的时候,表格根本没有显示任何数据,我不明白为什么, 也许有人有主意 数据结构: /** * date */ private Queue<Entry<Flight,Double>> data=new PriorityQueue<Entry<Flight,Double>>(); /** *日期 */ 专用队列数据=新的
/**
* 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 " ";
}
@覆盖
公共对象getValueAt(int行索引、int列索引){
如果(!data.isEmpty()){
条目e=data.poll();
开关(列索引)
{
案例0:
返回e.getKey().getFlightNumber();
案例1:
返回e.getKey().getFlightDateAndTimeSource();
案例2:
返回e.getKey().getFlightDateAndTimeDestination();
案例3:
返回e.getKey().getSource();
案例4:
返回e.getKey().getDestination();
案例5:
返回e.getKey().getFlightCost();
案例6:
返回e.getKey().getPlanet();
案例7:
返回e.getValue();
默认值:return-1;
}
}
其他的
返回“”;
}
我通过调试进行了检查,数据不是空的。它也适用于peek
提前谢谢你 在这种情况下,
队列
的问题在于,它的设计不允许被多次遍历。我建议切换到排序的列表
。我认为正在发生的事情是,它被绘制一次,清空了队列
,任何后续的刷新、重画或重新绘制都会看到一个空的队列
,如果不讨论这个构造的意义,我建议它可能是关于您使用优先队列
的方式。
在getValueAt
内部,您可以使用peek
从队列中读取,但是poll
尝试修改它,这似乎是问题所在。
getValueAt
与您的专用队列数据在同一类中吗
根据您访问/使用队列的方式,它可能会解决您的问题,将其声明为static
如果您提供多一点代码,这将非常有用。因此e
设置为null
?您是否意识到每次渲染都会清空队列?你到底为什么要使用队列作为数据模型呢?我没有选择类型,这是本作业的一个给定方法,返回优先级队列。是的,它都在同一个类中。该类扩展了AbstractTableModel,所有其他方法都是标准重写。我尝试将数据更改为列表,并添加队列的所有元素,但没有找到使用队列的解决方案。