以下呈現幾種double array比大小的寫法和速度
內容包含計算array中的加總sum,取最大max,取最小min,平均avg
速度是double3 > double1 > double2
array數值10萬筆,double1執行13ms,double2執行26 ms,double3執行2 ms
init array ----------------------
count = 100,000
Test1 ----------------------
sum = 5.015638188306569E7 , max = 1000.9994876218045 , min = 1.0048125853467917 , avg = 501.56381883065694
Time: 13 ms
Test2 ----------------------
sum = 5.015638188306569E7 , max = 1000.9994876218045 , min = 1.0048125853467917 , avg = 501.56381883065694
Time: 26 ms
Test3 ----------------------
sum = 5.015638188306546E7 , max = 1000.9994876218045 , min = 1.0048125853467917 , avg = 501.5638188306546
Time: 2 ms
程式如下 :
import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; import java.math.BigDecimal; import java.text.DecimalFormat; import java.util.*; @Slf4j public class DoubleArray { public static void main(String[] args) { System.out.println("init array ----------------------"); int count = 100000;//可以指定要多少數量去比大小 DecimalFormat df = new DecimalFormat("#,###"); System.out.println("count = " + df.format(count)); double[] init = new double[count]; for(int i = 0 ;i < count; i++){ init[i] = (double)(Math.random() *1000+1); } //array 0:max,1:min,2:avg double[] result = new double[3]; result = double1( init ); result = double2( init ); result = double3( init ); } public static double[] double1(double[] init ) { System.out.println("Test1 ----------------------"); Long start = System.currentTimeMillis(); double sum = 0 , max = 0 , min = 0 , avg = 0; double[] result = new double[3]; sum = Arrays.stream(init).sum(); max = Arrays.stream(init).max().getAsDouble(); min = Arrays.stream(init).min().getAsDouble(); avg = Arrays.stream(init).average().getAsDouble(); System.out.println(String.format("sum = %s , max = %s , min = %s , avg = %s",sum,max,min,avg)); Long end = System.currentTimeMillis(); System.out.println("Time: " + (end - start) + " ms"); result[0] = max; result[1] = min; result[2] = avg; return result; } public static double[] double2(double[] init ) { System.out.println("Test2 ----------------------"); Long start = System.currentTimeMillis(); double sum = 0 , max = 0 , min = 0 , avg = 0; double[] result = new double[3]; int length = init.length; Arrays.sort(init); sum = Arrays.stream(init).sum(); max = init[length-1]; min = init[0]; avg = Arrays.stream(init).average().getAsDouble(); System.out.println(String.format("sum = %s , max = %s , min = %s , avg = %s",sum,max,min,avg)); Long end = System.currentTimeMillis(); System.out.println("Time: " + (end - start) + " ms"); result[0] = max; result[1] = min; result[2] = avg; return result; } public static double[] double3(double[] init ) { System.out.println("Test3 ----------------------"); Long start = System.currentTimeMillis(); double sum = 0 , max = 0 , min = 0 , avg = 0; double[] result = new double[3]; int length = init.length; for(int i = 0 ; i < length ; i++){ if(i == 0){ min = init[i]; } sum += init[i]; if(max < init[i]){ max = init[i]; } if(min > init[i]){ min = init[i]; } } avg = sum / length; System.out.println(String.format("sum = %s , max = %s , min = %s , avg = %s",sum,max,min,avg)); Long end = System.currentTimeMillis(); System.out.println("Time: " + (end - start) + " ms"); result[0] = max; result[1] = min; result[2] = avg; return result; } }
文章標籤
全站熱搜
