从arraylist中查找并打印前三个最大的整数值

时间:2013-11-06 19:48:57

标签: arraylist integer max

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的最大值。我如何打印前三个(降序)?

3 个答案:

答案 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是要选择的元素数。你可以:

  1. 循环浏览列表并跟踪3个最大元素。仅使用3个变量的简单方法不能很好地扩展,但您可以使用堆来以良好的性能来概括问题。这在O(n log k)中运行。

  2. 按降序对列表排序,然后打印前3个元素。这通常在O(n log n + k)中运行。

  3. 实施选择算法,例如quickselect,以选择最大的3.这更为复杂,但您也可以选择有效地打印第3个最大元素,或从第5个到第7个等。它以O(nk)运行。

答案 2 :(得分:0)

对ArrayList进行排序,然后获取前3个元素。