максимальный элемент в массиве в Java (Collections.max () для целочисленных массивов int []) - PullRequest
4 голосов
/ 25 декабря 2008

Есть ли что-то вроде Collections.max, которое находит максимальное значение в массиве для регулярных массивов в стандартной библиотеке времени выполнения Java?

Ответы [ 5 ]

6 голосов
/ 16 мая 2009

Если у вас есть массив объектов, вы можете использовать

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

Если у вас есть массив примитивов, вы можете просто использовать простой цикл.

long[] array;
long max = array[0];
for(long l : array) if (max < l) max = l;
1 голос
/ 25 декабря 2008

Вы можете использовать Arrays.sort (int []) и затем получить доступ к первому (или последнему) его элементу. Или вы можете просто перебрать массив и найти самый большой / самый большой элемент. Это, в общем-то, и ежу понятно.

1 голос
/ 25 декабря 2008

Нет, Arrays.max или аналог не существует, по крайней мере, в Java 6.

Если вы посмотрите на сигнатуру и реализацию Collections.max, она довольно интенсивно использует параметризованные типы. В Java универсальные массивы, по меньшей мере, проблематичны, поэтому, возможно, поэтому нецелесообразно предоставлять универсальную максимальную реализацию для массивов в Java и сохранять акцент на (универсальных) коллекциях.

Редактировать: как правильно указывает newacct, использование универсальных массивов *1005* не обязательно более проблематично, чем использование универсальных коллекций, поэтому я отредактировал приведенный выше текст, поскольку оригинал был неверным. Тем не менее, по моему мнению, основной аргумент «универсальные массивы являются проблематичными» все еще действителен, и коллекции должны быть предпочтительнее массивов ссылочных типов.

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;
}
0 голосов
/ 25 декабря 2008

Вы также можете создать декоратор для Collection, который содержит дополнительные методы, такие как getMaximumValue (), и заставляет его обновлять возвращаемое значение каждый раз, когда элемент добавляется / удаляется при необходимости.

Это имело бы смысл только в том случае, если бы вы много использовали максимальное значение в вашей программе, что означало бы, что повторение списка каждый раз приводило бы к значительным накладным расходам.

0 голосов
/ 25 декабря 2008

Насколько я знаю, нет. Вы можете посмотреть на asList (http://java.sun.com/j2se/1.5.0/docs/api/java/util/Arrays.html#asList(T...)),, но, вероятно, оно того не стоит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...