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

Posted

技术标签:

【中文标题】用于在未排序数组中查找最大元素的 Java util 函数【英文标题】:Java util function for finding max element in unsorted array [closed] 【发布时间】:2014-10-19 09:48:33 【问题描述】:

是否有任何 java util 类和相应的方法可以返回未排序数组中的最大元素?

【问题讨论】:

请解释一下为什么在 google 上找不到这个? 对于 1522 的代表,您可以以更好的方式询问或先进行一些谷歌搜索! :) @NoobEditor 1522 全部来自问题,没有来自答案。 @icza :正是我在之前评论中的观点!! :D 【参考方案1】:

您可以使用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 文档。

【讨论】:

可能要补充一点,数组不能是原始数组。【参考方案2】:

Collections.max(Collection<YourObj> yourList);

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

【讨论】:

【参考方案3】:

使用 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],可用于确定是否计算了结果。

【讨论】:

不错的答案,但您不认为发布此类问题的用户无法理解:D【参考方案4】:

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

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

在问此类问题之前,请先使用谷歌并检查是否已经知道解决您问题的方法。我在这里复制了 2 种方法的 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 - 最大元素的集合 决定。返回:给定集合的最大元素, 根据其元素的自然顺序。

但是,如果您有某种不直接与另一个元素比较的对象数组,则您必须使用重载的 max 方法,该方法也使用Comparator 参数。因此,您也必须有一个比较器。

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

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

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

【讨论】:

以上是关于用于在未排序数组中查找最大元素的 Java util 函数的主要内容,如果未能解决你的问题,请参考以下文章

在未排序的数组中找到第 k 个最大的元素

LeetCode.215-数组中的第K个最大元素

在未排序的数组 1 到 100 中查找 2 个缺失的数字。(Java)[重复]

如何在 int 数组中查找元素的索引?

Java习题(选择,冒泡排序,折半查找)

排序和搜索----数组中的第K个最大元素