java 正在获取数组列表中的前3个最大值?[已关闭]

lvjbypge  于 2023-02-02  发布在  Java
关注(0)|答案(6)|浏览(284)

**已关闭。**此问题需要debugging details。当前不接受答案。

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
八年前就关门了。
Improve this question
我有一个用整数填充的数组列表。我只需要一个方法来获得数组列表中的前三个整数。

bweufnob

bweufnob1#

List<Integer> list;
Collections.sort(list);
List<Integer> top3 = new ArrayList<Integer>(list.subList(Math.max(list.size() - 3, 0), list.size()));

我本来可以简单地使用subList,但是从subList()返回的列表是基列表上的一个 view,因此在那里所做的更改将反映在top3中。

ffvjumwh

ffvjumwh2#

您需要编写自己的比较器,并在ArrayList上使用Collections.sort(list, comparator),这将使前3个整数位于顶部(这完全基于比较器中的逻辑)。

3zwtqj6y

3zwtqj6y3#

这取决于列表的大小和您想要的性能。如果列表很“小”,那么根据您的要求,任何早期的解决方案都足够了。
如果列表很“大”并且性能很重要,那么您应该遍历列表并保留最大的3个。
另一个权衡是你的时间和bug与使用库的比较。提到的库方法中的一种将比定制编码的解决方案花费更少的程序员时间

8yparm6h

8yparm6h4#

使用Collections.sort可以排序和检索前三个值

gtlvzcf8

gtlvzcf85#

使用列表#子列表(int fromIndex,int toIndex)
返回此列表中指定的fromIndex(含)和toIndex(不含)之间的部分的视图。

yourList.subList(yourList.size() -n, yourList.size());

根据子列表单据

iaqfqrcu

iaqfqrcu6#

使用TreeSet(Collection c)构造函数将所有元素放入一个TreeSet中,然后使用TreeSet.descendingIterator获取前3个元素。列表可能包含重复的元素,使用TreeSet可以保证检索到3个不同的最大值。

相关问题