我目前有一个类,它有3个字符串或整数的链表,我通过三个addFirst
和removeFirst
命令用作堆栈。 (下面转载的类别)
我想添加将该类用作优先级队列的功能。我知道优先级队列是什么,所以我正在寻找一种简单的方法来添加insertWithPriority
和removeNext
。
直观的选择是从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();
}
}
答案 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
中使用该字段。