1

我正在为大学做一项任务,其中涉及优先级队列的自定义实现。队列中的每个项目将是一个Node<E>存储元素及其优先级(E,p)。整个字段是类型ArrayList<Node<?>>,3个实现将是 -

  • 未排序的队列,其中项目被添加到最后,并被队列中最长的最高优先级移除 - 类型ArrayList<Node<String>>

  • 已排序的队列,其中项目从队列的前面移除并添加到下一个最低优先级的第一个项目之前 - 因此优先级 2 的内容将添加到优先级 1 和 3 的项目之间。 - 类型ArrayList<Node<String>>

  • 队列的排序队列,其中每个节点元素是具有相同优先级的项目的数组列表 - 类型ArrayList<Node<ArrayList<String>>>

每个都有自己的入队、出队等方法。

我想知道是否可以定义一个方法,该方法将与优先级队列的所有三个实现一起使用,因为它们对应于应用程序中的相同字段,并且根据字段的定义调用队列类型的相应入队方法.

4

2 回答 2

1

为priorityQueue 的方法定义一个接口,然后对该接口进行三个实现。

interface PrioQueue{
  void enqueue(Node node);
  Node dequeue();
}

class PrioQueueVersion1 implements PrioQueue{
   ....
}

class PrioQueueVersion2 implements PrioQueue{
   ....
}

class PrioQueueVersion3 implements PrioQueue{
   ....
}
于 2013-01-27T17:42:45.480 回答
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

这是一个小例子,可能不是您在应用程序中使用它的方式,但希望它有助于加强我关于多态性的观点。

于 2013-01-27T18:29:10.167 回答