四种方法
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
关注
打赏
热门博文
- 【Linux】Ubuntu20.04安装和卸载MySQL8
- 【Linux】Ubuntu 20.04 报错 curl: (23) Failure writing output to destination 的解决方法
- 【Java】JUnit 4.13.2 警告 ‘assertEquals(double, double)‘ is deprecated 的解决方法
- 【JavaScript】处理 @parcel/transformer-js: Browser scripts cannot have imports or exports.
- 【Node.js】Windows环境安装配置NVM和Node.js
- 【Python】处理TypeError: Plain typing.NoReturn is not valid as type argument
- 【Python】Matplotlib可视化50例
- 【C语言】C语言修改MySQL数据库
- 【Java】从默认包导入类和对象报错的解决方法
- 【Java】panel.getGraphics()报错空指针异常的解决方法