以下呈現幾種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;
    }

}
文章標籤
全站熱搜
創作者介紹
創作者 我的暱稱 的頭像
我的暱稱

學習筆記

我的暱稱 發表在 痞客邦 留言(0) 人氣(3)