在泛型

时间:2017-09-20 07:45:12

标签: java generics arraylist heap priority-queue

在这个程序中,我使用Java中的arraylists创建堆优先级队列。 我会尝试保持代码裸露,以帮助更轻松地解决问题。

基本上,我已经为heapAPI定义了一个接口,并在Heap类中实现它。 Heap构造函数应该通过定义对象的arraylist来构造堆对象。在这里,我想传递PCB类的对象(作业进入优先级队列)。但是,当我传递这些对象时,我无法通过arraylist访问它们。

下面是HeapAPI,Heap类和PCB类的代码。

HeapAPI.java

public interface HeapAPI<E extends Comparable<E>>
{
     boolean isEmpty();
     void insert(E item);
     E remove() throws HeapException;
     E peek() throws HeapException;
     int size();
}

Heap.java

public class Heap<E extends Comparable<E>> implements HeapAPI<E>
{
     private ArrayList<E> tree;

     public Heap()
     {
          tree = new ArrayList<>();
     }

// don't believe the rest of the class is necessary to show
}

PCB.java

public class PCB implements Comparable<PCB>
{
     private int priority;

     // various private variables

     public PCB()
     {
       priority = 19;
       // instantiated variables
     }

    // don't believe the rest of the code is necessary
    // the one specific function of PCB I use follows

     public int getPriority()
     {
          return priority;
     }
}

在将PCB对象插入Heap对象的arraylist之后,我尝试了以下main方法通过ArrayList调用PCB对象的函数。

Main.java

public class Main 
{
     public static void main(String[] args) throws HeapException
     {
          Heap temp = new Heap();
          PCB block = new PCB();
          PCB block1 = new PCB();
          PCB block2 = new PCB();

          temp.insert(block);
          temp.insert(block1);
          temp.insert(block2);

          block.getPriority();

          // does not work
          int num = temp.peek().getPriority();
          //does not work
          num = temp.get(0).getPriority();
}

我得到的错误是程序无法找到符号:方法getPriority()。

[另外,导入java.util.ArrayList;在每个文件中调用]

我一直在尝试学习和应用泛型,但我现在只是陷入困境。

如果我不清楚任何事情,我可以轻松添加更多代码或澄清问题。

感谢任何帮助。

谢谢!

2 个答案:

答案 0 :(得分:2)

将您的堆声明更改为

Heap<PCB> temp = new Heap<>();

现在你的编译器知道Heap包含其他预期可比的PCB对象返回没有getPriority()方法。

答案 1 :(得分:2)

问题在于:

Heap temp = new Heap();

你有一个通用的Heap类,但是你在这里创建它没有它的泛型。这是Raw Types的一个例子。

类似的东西:

Heap<PCB> temp = new Heap<>();

应该有用。