在List中提取给定数量的最高值

Jam*_* P. 5 java sorting algorithm highest

我正在寻求根据各自的权重(由a表示Integer)在网页上显示固定数量的项目.找到这些物品的清单几乎可以是任何尺寸.

想到的第一个解决方案是通过执行a Collections.sort()来逐个获取项目List.是否有一个更优雅的解决方案虽然可以用来准备前八项?

Boz*_*zho 6

只是去Collections.sort(..).它足够有效.

该算法提供有保证的n log(n)性能.

如果你知道列表的一些独特属性,你可以尝试为你的具体案例实现更高效的东西,但这是不合理的.此外,例如,如果您的列表来自数据库,您可以LIMIT在那里订购,而不是在代码中订购.


Ber*_*t F 5

你的选择:

  1. 进行线性搜索,保持沿途发现的前N个权重. 如果由于某种原因,您无法在显示页面之间重复使用排序结果(例如列表正在快速更改),那么这应该比排序长度列表更快.

    更新:我认为线性搜索必须比排序更好.请参阅维基百科文章" Selection_algorithm - 选择k个最小或最大元素 "以获得更好的选择算法.

  2. 手动维护List按重量顺序排序的(原始的或平行的).您可以使用Collections.binarySearch()等方法来确定每个新项目的插入位置.

  3. List通过在每次修改,批量修改之后或在显示之前调用Collections.sort()来维护按原样顺序排序的(原始的或平行的)(可能维护修改标志以避免对已排序的列表进行排序).

  4. 使用维护已排序权重顺序的数据结构:优先级队列,树集等.您还可以创建自己的数据结构.

  5. 手动维护前N个项目的第二个(可能是重量排序的)数据结构.只要修改原始数据结构,就会更新此数据结构.您可以创建自己的数据结构以将原始列表和此"前N个缓存"包装在一起.