Дополнительно
Нахождение максимального/минимального значения в массиве примитивов с помощью Java
Тривиально написать функцию для определения минимального/максимального значения в массиве, например:
/**
*
* @param chars
* @return the max value in the array of chars
*/
private static int maxValue(char[] chars) {
int max = chars[0];
for (int ktr = 0; ktr < chars.length; ktr++) {
if (chars[ktr] > max) {
max = chars[ktr];
}
}
return max;
}
но разве это уже не сделано где-то?
167
15
Использование Commons Lang (для преобразования) + Collections (для минимизации/максимизации)
Обратите внимание, что
Arrays.asList()
оборачивает базовый массив, поэтому он не должен занимать много памяти и не должен выполнять копирование элементов массива.Вы можете просто использовать новый Java 8 `поток но вы должны работать с
инт
.В
поток
метод в служебный классмассивы
дает вамIntStream
, на котором вы можете использовать мин метод. Вы также можете делатьМакс
,сумма
,средний
,...В
getAsInt
метод используется, чтобы получить значение изOptionalInt
==Обновления==
Если время выполнения очень важно, и вы хотите, чтобы пройти через данные только один раз можно использовать
summaryStatistics()
метод такойТакой подход может дать более высокую производительность, чем классические петли, потому что
summaryStatistics
метод операция по уменьшению и это позволяет распараллеливания.В библиотеке Google гуава имеет min и Max методы в своих символов, целых чисел, длинных и т. д. классов.
Так что вы можете просто использовать:
Никаких преобразований не требуется, и, вероятно, это's эффективно реализованы.
Да, это делается в классе Collections. Обратите внимание, что вам нужно будет вручную преобразовать массив примитивных символов char в Character[].
Небольшая демонстрация:
У меня есть маленький помощник класса во всех моих приложений с такими методами, как:
Вы могли бы легко сделать это с метод
IntStream
иМакс ()
.Пример ###
Объяснение
в диапазоне(0, класса intarray.длина)
- получить поток с, как многие элементы, присутствующие в
класса intarray`.Карта(я -> класса intarray[я])
- карте каждого элемента потока к фактическому элементу
класса intarray`.макс()
- получить максимальный элемент этого потока, как
OptionalInt`.getAsInt()
- развернутьOptionalInt
. (Вы можете также использовать здесь:Если(0)
на всякий случай `OptionalInt пуст.)Решение с
уменьшить()
:В приведенном выше коде,
уменьшить возвращает данные () в необязательный формат, который можно преобразовать в
intв
getAsInt()`.Если мы хотим сравнить максимальное значение с определенным количеством, мы можем установить начальное значение в метод reduce()`:
В приведенном выше коде, когда уменьшить()` с удостоверением (начальное значение) в качестве первого параметра, то она возвращает данные в том же формате, с удостоверением. С этим свойством, мы можем применить это решение на другие массивы:
Пример с поплавком:
Вот решение, чтобы получить максимальное значение в примерно 99% работает (изменить 0,01, чтобы получить лучший результат):
(Не вполне серьезно)
Вот утилитарный класс, предоставляющий методы
min/max
для примитивных типов: Primitives.javaПередать массив в метод, который сортирует ее с массивами.сортировать()
так это только сортирует массив методом является использование затем устанавливает *мин* к
массив[0]и *максимум* к
массив[массив.длина-1]`.Базовые способ получить мин/макс значение массива. Если вам нужен массив несортированный, вы можете создать копию или передать его в метод, который возвращает минимальное или максимальное. Если не отсортированный массив лучше, так как он выполняет быстрее в некоторых случаях.