只是去Collections.sort(..).它足够有效.
该算法提供有保证的n log(n)性能.
如果你知道列表的一些独特属性,你可以尝试为你的具体案例实现更高效的东西,但这是不合理的.此外,例如,如果您的列表来自数据库,您可以LIMIT在那里订购,而不是在代码中订购.
你的选择:
进行线性搜索,保持沿途发现的前N个权重. 如果由于某种原因,您无法在显示页面之间重复使用排序结果(例如列表正在快速更改),那么这应该比排序长度列表更快.
更新:我认为线性搜索必须比排序更好.请参阅维基百科文章" Selection_algorithm - 选择k个最小或最大元素 "以获得更好的选择算法.
手动维护List按重量顺序排序的(原始的或平行的).您可以使用Collections.binarySearch()等方法来确定每个新项目的插入位置.
List通过在每次修改,批量修改之后或在显示之前调用Collections.sort()来维护按原样顺序排序的(原始的或平行的)(可能维护修改标志以避免对已排序的列表进行排序).
手动维护前N个项目的第二个(可能是重量排序的)数据结构.只要修改原始数据结构,就会更新此数据结构.您可以创建自己的数据结构以将原始列表和此"前N个缓存"包装在一起.