用于在未排序数组中查找max元素的Java util函数

时间:2014-08-26 06:40:47

标签: java

是否有任何java util类和相应的方法,它返回未排序数组中的max元素?

4 个答案:

答案 0 :(得分:7)

您可以使用Collections.max(Arrays.asList(your_array))。并且数组不能是原始数组。

Java文档:http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#max(java.util.Collection)

PS:我建议你先在这里发布问题之前先阅读java文档。

答案 1 :(得分:2)

Collections.max(Collection<YourObj> yourList);

YouObj应该实现Comparable,否则它会通过自然排序获得最大值...

答案 2 :(得分:1)

使用Java 8 Stream api,您可以非常轻松地完成此任务。

假设数组不是原始的:

public <T extends Comparable<? super T>> T max(final T[] array) {
    return Stream.of(array).max(naturalOrder()).get();
}

这会强制数组中的对象向自身或其自身的某个超类实现Comparable - 即它具有“自然顺序”。

对于原始数组,Java 8具有IntStreamLongStreamDoubleStream,可以这样使用:

public long max(final long[] array) {
    return LongStream.of(array).max().getAsLong();
}

请注意,如果传递一个空数组,这两个方法都抛出NoSuchElementException - 这是设计使然。找到空数组的max()时没有合理的默认值返回,因此Java 8返回Optional[XXX],可用于确定是否计算了结果。

答案 3 :(得分:0)

如果你的数组只是一个int,double或那种数组,你可以轻松使用 Collections.max()方法。

Collections.max(Arrays.asList(array));

在询问此类问题之前,请先使用google并检查是否已经知道如何解决您的问题。我在这里复制了两种方法的java api doc。

<强> Collections.max()

public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
  

返回给定集合的最大元素,根据   其元素的自然排序。集合中的所有元素都必须   实现Comparable接口。此外,所有元素   集合必须是可相互比较的(即e1.compareTo(e2)必须   不为任何元素e1和e2抛出ClassCastException   采集)。这个方法迭代整个集合,因此它   需要时间与集合的大小成比例。

     

参数:coll - 最大元素所在的集合   决心。返回:给定集合的最大元素,   根据其元素的自然顺序。

但是如果你有某种对象数组没有直接与另一个元素进行比较,你必须选择使用Comparator参数的重载max方法。因此,你也必须有一个比较器。

public static <T> T max(Collection<? extends T> coll,
        Comparator<? super T> comp)
  

返回给定集合的最大元素,根据   由指定的比较器引起的顺序。中的所有元素   集合必须通过指定的比较器相互比较   (也就是说,comp.compare(e1,e2)不能抛出ClassCastException   集合中的任何元素e1和e2)。这种方法迭代   整个集合,因此它需要与大小成比例的时间   该系列。

     

参数:coll - 最大元素所在的集合   决心。 comp - 用于确定最大值的比较器   元件。空值表示元素&#39;自然排序   应该使用。返回:给定集合的最大元素,   根据指定的比较器。