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

问题描述 投票:0回答:6

标准 Java 运行时库中是否有类似

Collections.max
的东西可以查找常规数组(例如
int[]
)的数组中的最大值?

java collections max
6个回答
6
投票

如果你有一个对象数组,你可以使用

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

如果你有一个基元数组,你可以只使用一个简单的循环。

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

1
投票

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

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

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

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;
}

1
投票

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


0
投票

您还可以为 Collection 创建一个 decorator ,其中包含 getMaximumValue() 等额外方法,并在需要时更新每次添加/删除元素时返回的值。

只有当您在程序中大量使用最大值时,这才有意义,这意味着每次迭代列表都会导致显着的开销。


0
投票

使用 Java 8 中添加的流可以很简单地做到这一点:

int[] array = {1, 5, 3};

OptionalInt max = Arrays.stream(array).max();

-2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.