四种方法
System.arraycopy()
这是一个native的方法,也是对大数组最高效的方法。
Arrays.copyOf()源码如下:
public static T[] copyOf(T[] original, int newLength) {
return copyOf(original, newLength, original.getClass());
}
效率基本上一直都比System.arraycopy()差。
arrayObj.clone()数组的clone()看不到,不过还是存在clone()的,效果还行吧。
for循环为数组逐一赋值这个在小数据量级别既简单又快速,数据量大以后就很慢了。
如何做效率测试荐读:获取Java代码段运行毫秒数的策略
为什么用String类型的"orzorzorzorz"呢?因为太小的数组单元占用空间太少,复制太简单;太大还容易爆空间,所以就用这个挺好。
为什么开10_000_000大小的数组呢?首先声明,10_000_000
这个写法,其实是为了防止位数太多,看不清楚而有的写法,是符合Java语法规范的。
在一个是需要多次使用,使用一个final修饰的常量能更方便调整数组大小且保持统一。
10M,也就是1000W,应该算比较大的数组了。我们在不开大虚拟机空间的情况下,1000W已经很大了。开到100W不明显;开到1亿就内存爆炸了。
所以随便开个1000W的数组吧!
clone()是深拷贝吗荐读:总结Java数组的拷贝和输出
对于一维数组,确实能做到深拷贝!
完整代码import java.util.Arrays;
public class ArrayCopyTest {
public static void main(String[] args) {
final int LIMIT = 10_000_000;
String[] array0 = new String[LIMIT];
Arrays.fill(array0, "orzorzorzorz");
String[] array = new String[LIMIT];
long time1 = System.currentTimeMillis();
System.arraycopy(array0, 0, array, 0, LIMIT);
long time2 = System.currentTimeMillis();
array = Arrays.copyOf(array0, LIMIT);
long time3 = System.currentTimeMillis();
array = array0.clone();
long time4 = System.currentTimeMillis();
for (int i = 0; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?