Java排名类是否存在,增加/减少,第一/最后排名

时间:2011-05-30 14:32:40

标签: java

我正在创建排名类,但想知道是否已经存在任何实现。

需要的功能(这些将适当地向上/向下移动其他等级):

  • 增加/减少等级
  • 转到第一名/最后一名
  • 移至排名(x)
  • 检查排名中的任何差距,是如此移动排名以摆脱差距。即1,2,4,5将更新为1,2,3,4
  • 检查重复的排名。如果有重复的排名,请将其中一个设置为排名(可能是最旧的对象),然后将其他对象移到排名中。
  • Object getObjectAtRank(x)
  • Int getObjectRank(object)

是否有任何可以扩展的现有课程,或者我最好从头开始学习?

可能使用地图,但重复等级会出现问题等。

谢谢!

修改一些其他信息

我排名的对象是Jira问题,这些将有一个我将阅读的排名字段,因此如果删除问题,排名可能会有差距。

3 个答案:

答案 0 :(得分:5)

如果您没有任何其他限制,我认为ArrayList足以满足您的需求:

  • 增加/减少排名:交换相邻元素。
  • 移至第一个/最后一个排名:使用add()进行前置/附加。
  • 移至排名(x):使用add()插入。
  • 检查等级中的任何差距:不需要。
  • 检查重复排名:不需要。

你无法在O(1)时间内获得对象的等级。

答案 1 :(得分:2)

一个简单的ArrayList怎么样?您可以将索引用作排名。最好的部分是你不需要检查差距或重复等级。

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

答案 2 :(得分:1)

我不知道你想要什么的完全实现,但是GuavaRange类接近,特别是与DiscreteDomain

一起使用时

(不幸的是它在版本10中,尚未发布)


重新阅读问题:你想重新排名。范围似乎不支持这一点。

我认为你应该围绕一个简单的Arraylist构建你的功能:

  

增加/减少等级
  转到第一名/最后一名   排名(x)

所有这些都可以通过Collections.swap(List, offset1, offset2)

来实现
  检查排名中的任何差距,是如此移动排名以摆脱差距。即1,2,4,5将更新为1,2,3,4

无关。等级由列表偏移量定义。

  

检查重复的排名。如果存在重复的排名,请将其中一个排在等级(可能是最旧的对象)之下,并将其他对象向下移动。

同上。没有愚蠢,首先是一个元素