JavaScript和Java数组拷贝各种方法耗时比较
来源:互联网 发布:郑州863软件孵化器 编辑:程序博客网 时间:2024/06/01 13:03
Java数组复制方法耗时比较,先上代码:
import java.util.Arrays;/** * Created by jxr202 on 2017/10/13 */public class ArraysCopyCompare {// 初始化50000个元素的数组static int[] array = new int[50000]; static { for (int i = 0; i < array.length; i ++) { array[i] = (int) (10000 * Math.random()); } } public static void main(String args[]) { long time1 = 0, time2 = 0, time3 = 0, time4 = 0; for (int i = 0; i < 5; i ++) { time1 += method1(); time2 += method2(); time3 += method3(); time4 += method4(); } System.out.println("time1: " + time1 + ", time2: " + time2 + ", time3: " + time3 + ", time4: " + time4); } // 使用For循环复制数组,效率太低 static long method1() { long time = System.currentTimeMillis(); int[] arrayTemp = new int[array.length]; for (int i = 0; i < array.length; i ++) { arrayTemp[i] = array[i]; } userArray(arrayTemp); long time2 = System.currentTimeMillis(); System.out.println("method1 lost time: " + (time2 - time)); return time2 - time; } // 使用System.arraycopy()方法,可以看到他为native方法,性能优越 static long method2() { long time = System.currentTimeMillis(); int[] arrayTemp = new int[array.length]; System.arraycopy(array, 0, arrayTemp, 0, array.length); userArray(arrayTemp); long time2 = System.currentTimeMillis(); System.out.println("method2 lost time: " + (time2 - time)); return time2 - time; } // 使用Arrays.copyOf方法,其内部使用的是System.arraycopy(),效果和上面的差不多 static long method3() { long time = System.currentTimeMillis(); int[] arrayTemp = Arrays.copyOf(array, array.length); userArray(arrayTemp); long time2 = System.currentTimeMillis(); System.out.println("method3 lost time: " + (time2 - time)); return time2 - time; } // 使用Object.clone()方法,看起来需要强转转换,但实际上性能是最优的。 static long method4() { long time = System.currentTimeMillis(); int[] arrayTemp = array.clone(); userArray(arrayTemp); long time2 = System.currentTimeMillis(); System.out.println("method4 lost time: " + (time2 - time)); return time2 - time; } // 经研究发现,如果数组没有使用它,其复制速度简直超出想象,四个方法全是毫秒级别,只有在使用时才看能出效果 static void userArray(int[] array) { StringBuilder sb = new StringBuilder(); for (int value : array) { sb.append(value + ", "); } } }
Eclipse运行结果:
method1 lost time: 25method2 lost time: 9method3 lost time: 8method4 lost time: 8method1 lost time: 8method2 lost time: 8method3 lost time: 6method4 lost time: 4method1 lost time: 7method2 lost time: 4method3 lost time: 6method4 lost time: 5method1 lost time: 6method2 lost time: 3method3 lost time: 4method4 lost time: 4method1 lost time: 4method2 lost time: 4method3 lost time: 4method4 lost time: 3time1: 50, time2: 28, time3: 28, time4: 24
经研究发现:
0. 数组在复制后如果没有使用它,其耗时简直是毫秒级别,50000级别的数据,for耗时6毫秒,其他三个耗时1毫秒。故这里在比较时每个方法都使用了一次复制后的数组。
1. For循环方法,性能太慢,在遍历时消耗太多的时间,不推荐该方法。
2. System.arraycopy,该方法为native方法,原生太,性能优越,建议使用。
3. Arrays.copyOf,该方法内部使用的是System.arraycopy,和上面的方法差不多耗时,如果不想写太多的参数,建议使用该方法。
4. Object.clone,该方法另辟蹊径,快速而优越,在遍历它时甚至比原生的native方法还快速,非常推荐使用。
JavaScrpt数组复制方法耗时比较,先上代码:
(function () { // 初始化50000个元素的数组 let array = []; for (let i = 0; i < 50000; i ++) { array.push(parseInt(10000 * Math.random())); } method1(); method2(); method3(); // 使用For循环复制数组,效率太低 function method1() { let arrayTemp = []; let time = new Date().getTime(); for (let i = 0; i < array.length; i ++) { arrayTemp[i] = array[i]; } userArray(arrayTemp); let time2 = new Date().getTime(); console.log("For lost time: " + (time2 - time)); } // 使用slice复制数组,性能优越,建议使用 function method2() { let time = new Date().getTime(); let arrayTemp = array.slice(); userArray(arrayTemp); let time2 = new Date().getTime(); console.log("Slice lost time: " + (time2 - time)); } // 使用concat复制数组,性能极佳,推荐使用 function method3() { let time = new Date().getTime(); let arrayTemp = array.concat(); userArray(arrayTemp); let time2 = new Date().getTime(); console.log("Concat lost time: " + (time2 - time)); } // 经研究发现,如果数组没有使用它,其复制速度简直超出想象,三个方法全是0-1毫秒,只有在使用时才看能出效果 function userArray(array) { let sb = ""; for (let value of array) { sb += value + ", " } }})();
WebStorm运行结果:
For lost time: 14Slice lost time: 9Concat lost time: 3
经研究发现:
0. 数组在复制后如果没有使用它,50000级别的数据,for耗时1毫秒,其他二个耗时0毫秒。故这里在比较时每个方法都使用了一次复制后的数组。
1. For循环方法,性能太慢,在遍历时消耗太多的时间,不推荐该方法。
2. Slice,该方法为仅耗时9个毫秒,性能优越,建议使用。
3. Concat,该方法仅耗时3个毫秒,性能极速,非常推荐使用。
4. JavaScript中数组没有clone方法,使用该方法会报错。
阅读全文
0 0
- JavaScript和Java数组拷贝各种方法耗时比较
- 数组拷贝的方法比较
- javascript数组比较方法
- javascript数组基础和数组方法的各种使用
- JavaScript中For循环和Map循环耗时比较
- JavaScript深拷贝和浅拷贝数组
- Java数组和各种List的性能比较
- JAVA数组去重和JavaScript数组去重比较
- javascript深度拷贝和数组去重代码详解; 数组,类数组,try-catch方法介绍
- Java数组拷贝方法arraycopy()
- Java数组拷贝/复制的效率比较
- Java数组拷贝/复制的效率比较
- java文件读写耗时比较
- javascript中数组和字符串的方法比较
- 深入理解 JavaScript 对象和数组拷贝
- java数组排序和数组拷贝
- 【Java】 数组拷贝的通用方法
- Java数组拷贝的四种方法
- 最全面的正则表达式大全
- 微信公众平台开发
- Spring(二)容器
- filter
- 7-1 银行业务队列简单模拟
- JavaScript和Java数组拷贝各种方法耗时比较
- JAVA基础(一)——异常
- jQuery实现可以编辑的表格实例详解
- 监控MYSQL主从同步配置中监控从库运行状态的脚本
- 事务的传播行为(讲得比较好)
- github上值得关注的项目
- Android源码在线阅读
- Hyper-V应用指南---导入导出虚拟机
- Matlab 矩阵与向量的基本运算