Java优先级队列查询和轮询

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>>(); /** *日期 */ 专用队列数据=新的

我试图用优先级队列中的数据创建一个表模型。 问题是-当我写“peek”时,显然它总是检索队列的顶部, 但是当我写“poll”的时候,表格根本没有显示任何数据,我不明白为什么, 也许有人有主意

数据结构:

/**
* 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,所有其他方法都是标准重写。我尝试将数据更改为列表,并添加队列的所有元素,但没有找到使用队列的解决方案。