Java优先级队列查看和轮询

时间:2014-07-31 11:44:41

标签: java user-interface priority-queue

我正在尝试使用优先级队列中的数据创建表模型。 问题是 - 当我写“偷看”时,它显然总是检索队列的顶部, 但是当我写“民意调查”时,表格根本没有显示任何数据,我不明白为什么, 也许有人有想法?

数据结构:

/**
* 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 " ";
    }

我通过调试检查,数据不为空。它也适用于偷看。

提前谢谢!

2 个答案:

答案 0 :(得分:0)

在这种情况下,Queue的问题在于它不能被设计为多次遍历。我建议切换到排序List。我认为正在发生的事情是它被绘制一次会清空Queue并且任何后续刷新,重绘或重新排序都会看到空Queue

答案 1 :(得分:0)

如果不讨论这种结构的意义,我建议它可能与您使用PriorityQueue的方式有关。 在getValueAt内,您可以使用peek从队列中读取,但poll会尝试修改它,这似乎是问题所在。 getValueAtprivate Queue<Entry<Flight,Double>> data相同的是static吗?

根据您访问/使用队列的方式,它可能会解决您的问题,并将其声明为{{1}}。

如果您提供更多的代码,那将非常有用。