簡體   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