[英]Java priority queue that extends comparable?
我正在進行課堂作業,我不太明白如何在作業要求的方式中使用比較器。
作業內容為:
“完成優先級隊列類
這是我正在上的課...
public class PriorityQueue <Item extends Comparable<Item>> {
public PriorityQueue()
{
}
public PriorityQueue(Comparator<Item> compare )
{
}
private int size = 0;
private Node<Item> head = null;
private Comparator<Item> compare ;
private static class Node<Item>
{
private Item data;
private Node<Item> next;
public Node(Item data, Node<Item> next)
{
this.data = data;
this.next = next;
}
public Node(Item data)
{
this.data = data;
this.next = null;
}
public Node()
{
this.data = null;
this.next = null;
}
}
@Override
public int size() {
return size;
}
@Override
public Item dequeue() {
// TODO Auto-generated method stub
return null;
}
@Override
public void enqueue(Item item) {
Node<Item> curr = head;
Node<Item> prev = curr;
if (isEmpty())
{
head = new Node<Item>(item,null);
}
else
{
while (curr != null)
{
prev = curr;
curr = curr.next;
}
prev.next = new Node<Item>(item, curr);
}
size++;
}
@Override
public boolean isEmpty() {
return size == 0;
}
@Override
public void printQueue() {
Node<Item> curr = head;
while (curr != null)
{
System.out.println(curr.data);
curr = curr.next;
}
}
}
這是隊列將包含的流程類。
public class Process implements Comparable<Process> {
private ProcessPriorty priority;
private String name;
public Process(ProcessPriorty priority, String name) {
super();
this.priority = priority;
this.name = name;
}
public void setPriority(ProcessPriorty priority) {
this.priority = priority;
}
@Override
public String toString() {
return name + "... Priority = " + priority + ".";
}
public String getName() {
return name;
}
public ProcessPriorty getPriority() {
return priority;
}
@Override
public int compareTo(Process other) {
if(other == null)
{
return 1;
}
return this.priority.compareTo(other.priority) ;
}
}
我了解隊列的概念,甚至已經將enqueue方法編碼為一個簡單的隊列,該隊列在插入項目時將它們插入。我遇到的問題是比較該方法中的節點以在插入時按優先級對列表進行排序。 我認為這與轉讓的這三個方向有關。 那么,我想用構造函數,Comparator變量做什么,以及如何使它默認為compareTo?
好吧,因為你有一個隊列頭部的引用,從那里很簡單。 您有2種情況-
compare != null
compare == null
在第一種情況下,您對Comparator :: compareTo感興趣。 根據優先級隊列的定義,您所要做的就是從頭開始遍歷隊列,並且只要enqueue(Item item)
的item
enqueue(Item item)
大於遍歷中的當前element
,就可以在element
之前插入item
。 您將使用compare.compareTo(item, element)
來確定它們的順序。
在第二種情況下,您將僅使用item.compareTo(element)
進行上述比較,遍歷和插入將相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.