将链接列表更改为优先级队列

时间:2011-02-05 01:52:16

标签: java priority-queue

我目前有一个类,它有3个字符串或整数的链表,我通过三个addFirstremoveFirst命令用作堆栈。 (下面转载的类别)

我想添加将该类用作优先级队列的功能。我知道优先级队列是什么,所以我正在寻找一种简单的方法来添加insertWithPriorityremoveNext

直观的选择是从3个linkedLists的类切换到3个priorityQueues,但我有点困惑如何在java中使用优先级队列。 具体,我需要所有3的优先级相同,以便removeNext将删除由insertWithPriority添加的相同3个元素。

有人可以了解如何实施正确的priorityQueue吗?

class ThreeList{
    public LinkedList foo;
    public LinkedList bar;
    public LinkedList etal;

    public ThreeList(){
        foo= new LinkedList();
        bar= new LinkedList();
        etal= new LinkedList();
    }

    public void addLast(String foo, int bar, int etal){
        foo.addLast(foo);
        bar.addLast(bar);
        etal.addLast(etal);
    }

    public void addFirst(String foo, int bar, int etal){
        foo.addFirst(foo);
        bar.addFirst(bar);
        etal.addFirst(etal);
    }

    public void removeFirst(){
        foo.removeFirst();
        bar.removeFirst();
        etal.removeFirst();
    }

    public void removeLast(){
        foo.removeLast();
        bar.removeLast();
        etal.removeLast();
    }   
}

1 个答案:

答案 0 :(得分:1)

PriorityQueue通过使用Comparable或Comparator提供优先级,即您只使用add。

在你的情况下,最好使用一个简单的静态内部类来将foo,bar和etal捕获到一个对象中。

static class FooBar implements Comparable<FooBar> {
   String foo;
   int bar, etal;

   int compareTo(FooBar other) {
     ... comparison logic here...
   }

}

如果值foo,bar,etal不隐式包含优先级,则需要向FooBar添加另一个字段并在compareTo中使用该字段。