2011-05-30 21 views
0

我正在創建排名類的過程中,但想知道是否已有任何現有的實現。是否存在Java排名類,增加/減少,第一/最後一個排名

功能需要(這些將其他隊伍向上/向下適當地移動):

  • 增大/減小排名
  • 移動到第一/最後一列
  • 移動到秩(X)
  • 檢查排名中的任何差距,是如此移動隊伍來擺脫差距。即1,2,4,5將更新爲1,2,3,4
  • 檢查重複的等級。如果有重複的等級,請將其中一個降級(可能是最老的對象),並將其他對象向下移動。
  • 對象getObjectAtRank(X)
  • 詮釋getObjectRank(對象)

是否有任何exisiting類,我可以擴展還是我最好從頭開始做這件事?

可能與地圖使用,但不會有重複的行列等

感謝的問題!

編輯一些額外的信息

我排名的對象是吉拉的問題,這些都將有一個等級字段,我將讀取,所以如果一個問題被刪除有可能是在排名差距。

+0

應該「獲得排名第三」是一個支持的操作? – 2011-05-30 14:36:01

+0

是的,一個getElementAtRank(x)方法應該可用。 – Sam 2011-05-30 14:45:50

回答

5

如果你沒有任何其他限制,我覺得ArrayList足以滿足您的需求:

  • 增大/減小排名:交換相鄰的元素。
  • 移至第一個/最後一個等級:使用add()添加/附加。
  • 移動到等級(x):插入使用add()
  • 檢查排名中的任何差距:沒有必要。
  • 檢查重複行列:不需要。

儘管如此,您無法獲得O(1)時間內對象的排名。

+1

+1這是我的想法! – Ishtar 2011-05-30 14:45:15

+0

對不起:) +1給你。 – 2011-05-30 14:54:56

1

,我不知道有任何全面推行你想要什麼,但GuavaRange類靠攏,尤其是在與一個DiscreteDomain

(一起使用遺憾的是它在版本10中,還沒有被釋放)


在重讀問題:你想重新排名的位置。範圍似乎不支持。

我想你應該建立自己的功能,圍繞一個簡單的Arraylist

增大/減小排名
移動到第一/最後一列
移動到秩(X)

所有這些可以通過Collections.swap(List, offset1, offset2)

檢查任何級別的差距,是如此移動身邊的隊伍來擺脫差距。即1,2,4,5將更新爲1,2,3,4

無關。等級由List偏移定義。

檢查重複行列。如果有重複的等級,請將其中一個降級(可能是最老的對象),並將其他對象向下移動。

同上。有沒有愚弄,一個元素至上

2

一個簡單的ArrayList如何?你可以使用索引作爲排名。最好的部分是你不需要檢查差距或重複的等級。

void increaseRank(Object o) { 
    int currentRank = list.indexOf(o); 
    list.remove(o); 
    list.add(o,currentRank - 1); 
} 
相關問題