繁体   English   中英

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

[英]maximal element in an array in Java (Collections.max() for integer arrays int[])

有没有像Collections.max那样在标准java运行时库中找到常规数组的数组中的最大值?

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

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

如果你有一个原始数组,你可以使用一个简单的循环。

long[] array;
long max = array[0];
for(long l : array) if (max < l) max = l;

您可以使用Arrays.sort(int [])然后访问它的第一个(或最后一个)元素。 或者你可以简单地迭代数组并寻找最大/最大的元素。 这基本上是一个明智的选择。

不,至少在Java 6中没有Arrays.max或类似的东西。

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

编辑:正如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;
}

您还可以为Collection创建一个装饰器 ,它包含额外的方法,如getMaximumValue(),并且如果需要,每次添加/删除元素时都会更新返回的值。

这只会有意义,但是如果你在程序中大量使用最大值,这意味着每次迭代列表都会导致很大的开销。

据我所知,没有。 您可以查看asList( http://java.sun.com/j2se/1.5.0/docs/api/java/util/Arrays.html#asList(T ...) ),但它可能不值得。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM