您可以使用一种方法将项目添加到3个不同的优先级队列实现中吗?

时间:2013-01-27 17:35:33

标签: java generics

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

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

  • 排序队列,其中项目从队列前面删除,并在下一个最低优先级的第一项之前添加 - 因此在优先级1和3的项目之间将添加优先级为2. - type { {1}}

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

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

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

2 个答案:

答案 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

这是一个小例子,可能不是你在应用程序中如何使用它,但希望它有助于强化我对多态性的看法。