Вот еще один способ сделать это.Этот подход не требует создания второй копии массива, поскольку Arrays.asList
просто создает представление данного массива на основе массива.Другим потенциальным преимуществом является тот факт, что знаки минимума и максимума сохраняются.В приведенном ниже примере минимум отображается как 1,333, а максимум - -9,43.
Это сложнее, чем решение Стефана, но, в зависимости от ситуации, оно может быть правильным для вас.
Float numbers[] = {-9.43f, 2.3f, -8.2f, 1.333f};
// Calculate the minimum
Float min = Collections.min(Arrays.asList(numbers),
new Comparator<Float>() {
public int compare(Float o1, Float o2) {
Float result = Math.abs(o1) - Math.abs(o2);
return result > 0 ? 1 : result < 0 ? -1 : 0;
}
}
);
// Calculate the maximum
Float max = Collections.min(Arrays.asList(numbers),
new Comparator<Float>() {
public int compare(Float o1, Float o2) {
Float result = Math.abs(o2) - Math.abs(o1);
return result > 0 ? 1 : result < 0 ? -1 : 0;
}
}
);
System.out.println("Min = " + min);
System.out.println("Max = " + max);
Вывод:
Min = 1.333
Max = -9.43
Редактировать: В ответ на комментарии "hatchetman82" я решил провести простой тест, чтобы увидеть, как работает мое решение по сравнению с решением Стефана Кендалла.,Для небольших массивов, состоящих менее чем из десяти тысяч элементов, два решения работают почти одинаково.Тем не менее, для больших массивов мое решение обычно будет работать лучше.
Подход Стефана совершенно верен, но он использует примерно вдвое больше памяти, чем мой, потому что он должен создать копию исходного массива для храненияабсолютное значение каждого элемента.Что касается сложности времени, я обнаружил, что мой подход выполнялся где-то между 4X и 7X быстрее, в основном из-за того, что подход Стефана требует копирования массива.Помните, что эти тесты проводились на одной машине (MacBook Pro, 4 ГБ, Core2 Duo @ 2.53) и результаты будут различаться в зависимости от конфигурации вашего компьютера и JVM.
Подход Стефана, безусловно, более прост,и мой может работать лучше в определенных ситуациях.Таким образом, в основном каждое решение является действительным, хотя одно или другое может быть предпочтительным в зависимости от ситуации.