6

我有一个用整数填充的数组列表。我只需要一种方法来获取数组列表中的前三个整数。

4

6 回答 6

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

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

于 2013-07-09T05:02:43.153 回答
1

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

于 2013-07-09T05:00:33.647 回答
1

这取决于列表的大小和您想要的性能。如果列表“小”,那么任何早期的解决方案都足够了,具体取决于您的要求。

如果列表“大”并且性能很重要,那么您应该遍历列表并保持 3 最大。

另一个权衡是您的时间和错误与使用库。与自定义编码的解决方案相比,提到的一种库方法将在更少的程序员时间内工作

于 2013-07-09T05:15:34.403 回答
0

使用 Collections.sort 对前三个值进行排序和检索

于 2013-07-09T05:00:38.310 回答
0

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

于 2013-07-09T05:02:38.690 回答
0

利用List#subList(int fromIndex,int toIndex)

返回此列表在指定的 fromIndex(包括)和 toIndex(不包括)之间的部分的视图。

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

根据子列表文档

于 2013-07-09T05:03:16.320 回答