如果你有一个对象数组,你可以使用
Collections.max(Arrays.asList(array));
如果你有一个基元数组,你可以只使用一个简单的循环。
long[] array;
long max = array[0];
for(long l : array) if (max < l) max = l;
不,没有 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;
}
您可以使用 Arrays.sort(int[]) 然后访问它的第一个(或最后一个)元素。或者您可以简单地迭代数组并查找最大/最大的元素。这基本上是理所当然的。
您还可以为 Collection 创建一个 decorator ,其中包含 getMaximumValue() 等额外方法,并在需要时更新每次添加/删除元素时返回的值。
只有当您在程序中大量使用最大值时,这才有意义,这意味着每次迭代列表都会导致显着的开销。
使用 Java 8 中添加的流可以很简单地做到这一点:
int[] array = {1, 5, 3};
OptionalInt max = Arrays.stream(array).max();
据我所知,没有。您可以查看 asList (http://java.sun.com/j2se/1.5.0/docs/api/java/util/Arrays.html#asList(T...)),但它可能不值得它。