在此程序中,我使用Java中的Array列表創建堆優先級隊列。 我會盡量保持代碼不變,以幫助更輕鬆地解決問題。無法找到符號/無法將對象轉換爲可比較的使用ArrayList中的泛型
本質上,我已經爲heapAPI定義了一個接口並在Heap類中實現它。堆構造函數應該通過定義對象的數組列表來構造堆對象。在這裏,我想傳遞PCB類的對象(作業進入優先級隊列)。但是,當我傳遞這些對象時,我無法通過數組列表訪問它們。
下面的附件是HeapAPI,堆類和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;
}
}
我曾嘗試以下方法主要通過該ArrayList調用PCB對象的功能將PCB對象插入Heap對象的數組列表後。
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()。
[另外,import java.util.ArrayList;被稱爲在每個文件中]
我一直在嘗試學習和應用泛型的熱門分鐘,但我現在只是卡住了。
如果我不清楚任何事情,我可以輕鬆添加更多代碼或澄清問題。
任何幫助表示讚賞。
謝謝!
請注意,除非PCB被認爲具有「自然」排序(我不認爲他們這樣做,如果PCB意味着「印刷電路板」)。相反,'PCB'不應該實現'Comparable',並且'HeapAPI'不需要被限制爲'Comparable'類型;而是可以向'HeapAPI'的實現者的構造函數提供'Comparator ',它允許它對元素進行排序。 [很多關於此的問題/回答](https://stackoverflow.com/questions/4108604/java-comparable-vs-comparator)。 –