2013-09-30 201 views
0

我有一個類是多一對(double, int)。我需要保留這些對象的兩個集合,這兩個對象都按double排序,一個按升序排列,另一個按降序排列。是否適合這種情況的PriorityQueue?

實施例:

asc: [(4.0, 10), (4.5, 8), (5.2, 13), (6.0, 1)] 
des: [(32.0, 20), (27.5, 2), (13.65, 4), (6.0, 100)] 

主要使用模式將是:

  1. 客戶端有一對(d, i)進入;
  2. 檢查集合中的一個(取決於客戶端)的頭一對(分別更高。),相對於d,比給定對;
  3. 如果存在,則根據i的值將其刪除或執行一些計算;
  4. 如果它不存在或未刪除,請將給定對插入其他集合的適當位置。

因此,主要的操作是:

  • 爲了插入;
  • 檢索頭;
  • 移除頭部。

實施例:

  1. 客戶端採用(4.2, 12)進入並想看asc;
  2. asc4.0有一對,它低於4.2;
  3. 刪除asc的頭,看看新的頭;
  4. 由於4.2低於6.0,新的頭高於4.2,因此客戶端將該對插入des的尾部。

由於沒有客戶端要遍歷集合,而是處理當前的頭,因爲插入必須在秩序和相當快,我會說一個PriorityQueue是這項工作的工具。

我說得對嗎,還是有更好的Java數據結構(沒有外部庫),我不知道?

例如,對於此任務,ArrayList聽起來很糟糕,因爲插入將發生在隨機索引處,而不是在尾部插入。

回答

1
  • 插入爲了

PriorityQueue.add()做到這一點。

  • 檢索頭

PriorityQueue.peek()做到這一點。

  • 刪除頭

PriorityQueue.poll()PriorityQueue.remove()做到這一點。

看起來像一個完美的適合我。

+0

確實如此。在我寫這個問題時,用例變得更加清晰了,最後我只是想知道是否還有其他合適的選擇。但我想我的問題的描述清楚地表明瞭一個'PriorityQueue'。 – afsantos

相關問題