我有一个填充了整数的arraylist。我只需要一种方法来获取arraylist中前三个整数。
我有一个填充了整数的arraylist。我只需要一种方法来获取arraylist中前三个整数。
List<Integer> list;
Collections.sort(list);
List<Integer> top3 = new ArrayList<Integer>(list.subList(Math.max(list.size() - 3, 0), list.size()));
我本可以简单地使用subList,但是从subList()返回的列表是基于原始列表的一个视图,因此在那里进行的更改会反映在top3中。
ArrayList
上使用 Collections.sort(list, comparator)
,这将把前三个整数排在最前面(这仅基于比较器中的逻辑)。这取决于列表的大小和你想要的性能。如果列表很“小”,那么早期的任何解决方案都可以满足你的要求。
如果列表很“大”且性能很重要,则应该遍历列表并在遍历过程中保留前3个最大值。
另一个权衡是你的时间和错误与使用库。使用提到的任何库方法都比自定义编码的解决方案花费更少的程序员时间。
利用List#subList(int fromIndex,int toIndex)
返回此列表中指定的fromIndex(包括)和toIndex(不包括)之间的部分视图。
yourList.subList(yourList.size() -n, yourList.size());
TreeSet
中,使用TreeSet(Collection c)
构造函数,然后使用TreeSet.descendingIterator
获取前3个元素。列表可能包含重复项,使用TreeSet可以保证检索到3个不同的最大值。