我正在为大学做一项任务,涉及优先队列的自定义实施。队列中的每个项目都是Node<E>
存储元素及其优先级(E,p)。整个字段的类型为ArrayList<Node<?>>
,3个实现的类型为 -
未排序的队列,最后添加了项目,并按队列中最长的最高优先级删除 - 类型ArrayList<Node<String>>
排序队列,其中项目从队列前面删除,并在下一个最低优先级的第一项之前添加 - 因此在优先级1和3的项目之间将添加优先级为2. - type { {1}}
队列的排序队列,其中每个Node元素是具有相同优先级的项目的数组列表 - 类型ArrayList<Node<String>>
每个都有自己的入队,出队等方法。
我想知道我是否可以定义一个方法,它将与优先级队列的所有三个实现一起使用,因为它们对应于Application中的相同字段,并且根据定义调用队列类型的相应队列方法领域的。
答案 0 :(得分:1)
为priorityQueue的方法定义接口,而不是为接口创建三个实现。
interface PrioQueue{
void enqueue(Node node);
Node dequeue();
}
class PrioQueueVersion1 implements PrioQueue{
....
}
class PrioQueueVersion2 implements PrioQueue{
....
}
class PrioQueueVersion3 implements PrioQueue{
....
}
答案 1 :(得分:0)
根据MrSmith的回答,如果您已经有三个独立的接口实现,您可以通过接口使用多态来获得所需的功能。我在下面发布了一个小例子:
public interface PrioQ
{
public void enqueue(Node n);
}
public class A implements PrioQ
{
public void enqueue(Node n)
{
System.out.println("Enqueue from A");
}
}
public class B implements PrioQ
{
public void enqueue(Node n)
{
System.out.println("Enqueue from B");
}
}
public class C implements PrioQ
{
public void enqueue(Node n)
{
System.out.println("Enqueue from C");
}
}
import java.util.ArrayList;
import java.util.List;
public class Driver
{
public static void main(String[] args)
{
List<PrioQ> queues = new ArrayList<>();
queues.add(new A());
queues.add(new B());
queues.add(new C());
for(PrioQ q : queues){
q.enqueue(new Node());
}
}
}
输出:
Enqueue from A
Enqueue from B
Enqueue from C
这是一个小例子,可能不是你在应用程序中如何使用它,但希望它有助于强化我对多态性的看法。