2013-04-09 80 views
0

我正在處理一個問題,要求我們根據幫助客戶所需的時間量添加隊列中的客戶。花費最少時間的客戶是那些首先會得到幫助的客戶(雖然沒有意義,但很好)。如何從類屬鏈接列表中的通用節點獲取信息

我已經創建了一個通用的「公共類MyQueue」,問題的主要思想是將MyQueue繼承到我們的ServiceQueue類中,並基本上超過了我們的推送方法。這是不完整的代碼,我知道這是行不通的:

void push(CustomerRequest request){ 
     if (head == null) 
    { 
     Node newHead = new Node(request); 
     head = newHead; 
    } 
     else { 

     Node newCustomer = new Node(request); 
     Node node = head; 
     int count; 

     while(request.requiredServiceTime > node-->*(I need the service time)*) 
     { 
      node = node.next; 
     } 
     ///insert node here 
     } 
    } 

也有CustomerRequest類:

public class CustomerRequest { 

String name; 
int requiredServiceTime; 

public CustomerRequest(String name, int requiredServiceTime){ 
    this.name = name; 
    this.requiredServiceTime = requiredServiceTime; 

} 
} 

我的問題是:我如何獲得requiredServiceTime信息出來的我創建並需要放入隊列的節點?

增加:

public class Node<T> { 

    Node<T> next; 
T data; 

public Node(T data) 
{ 
    this.data = data; 
} 

public Node(T data, Node<T> next) 
{ 
    this.data = data; 
    this.next = next; 
} 

}

+0

請向我們展示您的Node類。 – Mikkel 2013-04-09 21:56:34

+0

剛剛添加了節點類 – tathyler 2013-04-09 21:58:48

回答

0

爲什麼它必須是一個鏈表? 我會將CustomerRequests放入SortedSet中,並將自定義Comparator(比較requiredeServiceTimes)傳遞給SortedSet的構造函數。 細節記錄在這裏: http://docs.oracle.com/javase/6/docs/api/java/util/SortedSet.html

一旦元素在SortedSet的,你可以從一組的前面加上「第()」獲得最快的客戶。

+0

我在數據結構類中,所以我們必須創建所有的數據結構。我們不能使用任何進口。 – tathyler 2013-04-09 21:51:06

0

您是否考慮過使用PriorityQueue而不是自己的隊列實現?優先隊列是選取最小值的非常有效的手段。這些已經成爲標準JRE的一部分,很長時間以來它一直是非常。見the PriorityQueue javadoc

訣竅是然後更新你的類,使他們的默認排序是你想要的順序。您還可以爲您的隊列定義一個Comparator,該隊列按您想要的順序對CustomerRequest進行排序。

我會爲您的隊列使用PriorityQueue,然後更新CustomerRequest,以便它實現Comparable<CustomerRequest>,使得自然排序按所需服務時間排序。下面是一個非常幼稚的做法:

public class CustomerRequest implements Comparable<CustomerRequest> { 
    // existing code 
    ... 
    // Implement Comparable 
    public int compareTo(CustomerRequest obj) { 
     // Sort by required service time ascending 
     if (this.requiredServiceTime > obj.requiredServiceTime) 
      return 1; 
     else if (this.requiredServiceTime < obj.requiredServiceTime) 
      return -1; 
     else 
      // Sort by name to break ties 
      return this.name.compareTo(obj.name); 
    } 
} 
0

聲明的接口一樣具有可比性(http://docs.oracle.com/javase/6/docs/api/java/lang/Comparable.html)。您不必導入它,如果你不能,你來就讓它:

public interface Comparable<T> { 
    int compareTo(T other); 
} 

讓你CustomerRequest實現可比:

public class CustomerRequest implements Comparable { 
    ... 

讓您的LinkedList的要求實現可比數據:

public class Node<T extends Comparable> { 
    ... 

然後,您可以在插入排序中使用compareTo。