使用数组和复制数组的效率--优先使用数组

数组的使用可以被证明为是相当快的,这里指的是与ArrayList的比较,但是array不能伸缩,上来就要固定长度,这个是它的局限性,也是它速度快的原因。
ArrayList可以变换长度,会自动帮你扩展,现在想一下,它是怎么扩展的呢?很容易想到,它就是新建一个数组,把现有的东西复制到一个这个更大的数组中去,实现的,这样的效率极其低下。 [quote]array在某些时候的表现,可能比ArrayList快上10倍---
Peter hagger[/quote]
有个问题,我事先要是不知道长度呢,我怎么定,可能会想,我估个值,尽可能大,就行了,这样的做法虽然浪费了许多空间,但是[quote]性能上的收益可能超过内存方面的代价,只有通过细致的性能测评和对系统的详尽分析,才能做出正确的选择---Peter hagger[/quote]
当然数组不能存储对象类型,[b]ArrayList在大多数时是很不错的,但是如果有机会有数组实现,还是用数组实现。[/b]
[b]数组的复制[/b]也是经常遇到的问题,通常是这样做的:
public void copyArray(int[] src,int[] target){
for(int i:src){
target[i]=src[i];
}
}

如果知道有个函数是System.arraycopy(src, srcPos, dest, destPos, length),就会这样
public void copyArray2(int[] src,int[] target){
int length = src.length;
System.arraycopy(src, 0, target, 0, length);
}


打印结果:
用普通复制方法的时间32
用System.arraycopy的时间15


[b]原因:System.arraycopy是以本机函数实现的,执行速度更快。[/b]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值