Java中数组中的最大元素(整数数组int[]的Collections.max())

Java中数组中的最大元素(整数数组int[]的Collections.max()),java,stl,collections,Java,Stl,Collections,是否有类似于Collections.max的东西可以在标准java运行时库中为常规数组查找数组中的最大值?据我所知,没有。您可以查看asList(),但它可能不值得。您可以使用并访问它的第一个(或最后一个)元素。或者,您可以简单地迭代数组并查找最大/最大的元素。这基本上是不需要动脑筋的。不,至少在Java 6中没有array.max或类似的 如果查看Collections.max的签名和实现,它会大量使用参数化类型。在Java中,泛型数组至少是有问题的,因此在Java中为数组提供泛型max实现并

是否有类似于
Collections.max
的东西可以在标准java运行时库中为常规数组查找数组中的最大值?

据我所知,没有。您可以查看asList(),但它可能不值得。

您可以使用并访问它的第一个(或最后一个)元素。或者,您可以简单地迭代数组并查找最大/最大的元素。这基本上是不需要动脑筋的。

不,至少在Java 6中没有array.max或类似的

如果查看Collections.max的签名和实现,它会大量使用参数化类型。在Java中,泛型数组至少是有问题的,因此在Java中为数组提供泛型max实现并将重点放在(泛型)集合上可能不是一个好主意

编辑:正如newacct正确指出的那样,泛型数组的使用不一定比泛型集合的使用更麻烦,所以我编辑了上面的文本,因为原文是错误的。尽管如此,“泛型数组有问题”的主要论点在我看来仍然有效,集合应该优先于引用类型数组

public static <T> T max(Collection<? extends T> coll, Comparator<? super T> comp) {
    if (comp==null)
        return (T)max((Collection<SelfComparable>) (Collection) coll);

Iterator<? extends T> i = coll.iterator();
T candidate = i.next();

    while (i.hasNext()) {
    T next = i.next();
    if (comp.compare(next, candidate) > 0)
    candidate = next;
}
return candidate;
}
publicstatictmax(Collection您还可以创建一个for集合,其中包含额外的方法,如getMaximumValue(),并使其在每次添加/删除元素时更新返回的值(如果需要)


但是,只有在程序中经常使用最大值时,这才有意义,因为这意味着每次遍历列表都会造成很大的开销。

如果您有一个可以使用的对象数组

Collections.max(Arrays.asList(array));
如果你有一个基元数组,你可以使用一个简单的循环

long[] array;
long max = array[0];
for(long l : array) if (max < l) max = l;
long[]数组;
长最大值=数组[0];
如果(max
我知道asList,但我不想增加开销。在数组中查找最大值非常简单,我想它会在JRE的lib.Arrays.asList int[]中的某个地方将实际为您提供一个包含单个元素的列表。对于原语,它可能会重载,但这会导致其他问题。我没有查找generic max,只是查找普通的ol'integer max。就像Math.max不使用generic comparator一样。API中有一些用于数字数组的函数的示例,并且对于int[]float[]long[]short[]etc[]…如果您要查找“plain ol'integer max”,我的答案的第一行,以“No”开头的那行是适用的。如果您询问“是否有类似Collections.max的内容”我认为在回答中提及这种方法、它的泛型性以及对数组的影响是合适的。使用泛型数组没有比使用其他泛型集合更“有问题”的了。您上面发布的代码相当于:public static T max(T[]啊,,Comparator@newacct谢谢你的评论。你完全正确,我已经更新了答案。如果集合/数组为空/null,你可能应该抛出一个显式的NoTouchElementException。