java原生态查找一个数组中的最小和最大值,相信不少人都懂,说白了就是迭代比较
public class FindMaxOrMinTest {
public static void main(String[] args) {
Double[] doubles = {2.1,1.1,5.4,10.0,-6.8};
Double maxIndex = doubles[0];
Double minIndex = doubles[0];
for (int i = 0; i < doubles.length; i++) {
if (maxIndex < doubles[i]) {
maxIndex = doubles[i];
}
if (minIndex > doubles[i]) {
minIndex = doubles[i];
}
}
System.out.println("最大值:"+maxIndex+"\n最小值:"+minIndex);
}
}
使用common-math,其jar包下载地址如下:
Download Apache Commons Math
创建一个lib,放置jar包,然后构建路径即可
直接上码
public class FindMaxOrMinTest {
public static void main(String[] args) {
Double[] doubles = {2.1,1.1,5.4,10.0,-6.8};
//使用common-math
DescriptiveStatistics statistics = new DescriptiveStatistics();
for (int i = 0; i < doubles.length; i++) {
statistics.addValue(doubles[i]);
}
Double maxIndex = statistics.getMax();
Double minIndex = statistics.getMin();
System.out.println("最大值:"+maxIndex+"\n最小值:"+minIndex);
}
}
虽然看起来比没有比原生态简单多少,但是该描述性统计类DescriptiveStatistics还有很多非常好的方法,能够快速获得方差,标准差,中位数,百分位数等等,当然common-math还可以用来计算简单回归,最小二乘回归等等,小编只是给大家打开一扇窗,能看多远就靠大家了。(根据官方网站说法,这些方法都优化过,执行时占用内存更少了)
既然它都这么说了,小编也作死地进去看了一下源码(。。还行。。)
/**
* Returns the maximum of the available values
* @return The max or Double.NaN if no values have been added.
*/
public double getMax() {
return apply(maxImpl);
}
进去发现getMax是原来调用该方法,接着找呀找呀
@Override
public double evaluate(final double[] values, final int begin, final int length)
throws MathIllegalArgumentException {
double max = Double.NaN;
if (test(values, begin, length)) {
max = values[begin];
for (int i = begin; i < begin + length; i++) {
if (!Double.isNaN(values[i])) {
max = (max > values[i]) ? max : values[i];
}
}
}
return max;
}
所以呢,本质还是迭代比较,不过呢 max = (max > values[i]) ? max : values[i];这么高大尚的写法,小编是知道,不过没有这个习惯使用,看来小编还是属于入门级别。
(小编能力有效,仅供参考,莫怪!)