[英]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.