List<Integer> zmagovalci = new ArrayList<Integer>();
if (zmagovalci != null && !zmagovalci.isEmpty()) {
if (zmagovalci.size() == 1)
{System.out.println("Zmagal je Tekmovalec " + zmagovalci.get(0) + " " + "("+
stTockZmagovalca + " tock" + ")");
此代码返回/打印出来自arraylist的最大值。我如何打印前三个(降序)?
答案 0 :(得分:2)
如果您正在谈论纯粹的Java,那么您可以像这样实现它
Collections.sort(zmagovalci);
Collections.reverse(zmagovalci);
打印最大的3个数字:
for (int i = 0; i < 3; i++) {
System.out.println(zmagovalci.get(i));
}
修改强>
以下是我现在使用Java 8解决这个问题的方法:
zmagovalci.stream()
.sorted(reverseOrder())
.limit(3)
.forEach(System.out::println);
Java 8太好了:))
答案 1 :(得分:1)
您正在尝试选择最大的3个元素。设n是列表中元素的数量,k是要选择的元素数。你可以:
循环浏览列表并跟踪3个最大元素。仅使用3个变量的简单方法不能很好地扩展,但您可以使用堆来以良好的性能来概括问题。这在O(n log k)中运行。
按降序对列表排序,然后打印前3个元素。这通常在O(n log n + k)中运行。
实施选择算法,例如quickselect,以选择最大的3.这更为复杂,但您也可以选择有效地打印第3个最大元素,或从第5个到第7个等。它以O(nk)运行。
答案 2 :(得分:0)
对ArrayList进行排序,然后获取前3个元素。