我正在创建排名类,但想知道是否已经存在任何实现。
需要的功能(这些将适当地向上/向下移动其他等级):
是否有任何可以扩展的现有课程,或者我最好从头开始学习?
可能使用地图,但重复等级会出现问题等。
谢谢!
修改一些其他信息
我排名的对象是Jira问题,这些将有一个我将阅读的排名字段,因此如果删除问题,排名可能会有差距。
答案 0 :(得分:5)
如果您没有任何其他限制,我认为ArrayList
足以满足您的需求:
add()
进行前置/附加。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)
我不知道你想要什么的完全实现,但是Guava的Range
类接近,特别是与DiscreteDomain
(不幸的是它在版本10中,尚未发布)
重新阅读问题:你想重新排名。范围似乎不支持这一点。
我认为你应该围绕一个简单的Arraylist
构建你的功能:
增加/减少等级
转到第一名/最后一名 排名(x)
所有这些都可以通过Collections.swap(List, offset1, offset2)
检查排名中的任何差距,是如此移动排名以摆脱差距。即1,2,4,5将更新为1,2,3,4
无关。等级由列表偏移量定义。
检查重复的排名。如果存在重复的排名,请将其中一个排在等级(可能是最旧的对象)之下,并将其他对象向下移动。
同上。没有愚蠢,首先是一个元素