数组的拷贝for循环与slice性能对比

在工作中用到数组拷贝的时候,经常需要生成一个新的数组,与原数组互不相干,以前一直用的for循环
(其实for循环只能拷贝简单的非对象数组而已,如果数组里面有数组或对象也不行,只是本篇不讨论对象深浅拷贝的问题),觉得写起来很麻烦,偶然情况下发现slice方法也可以拷贝(原谅我的无知,以前确实只用了for循环一种循环,而且一直以为for循环可以进行对象的深拷贝…)

说回for循环和slice
那我其实一直都存疑的,原生for循环与slice的性能到底谁好一点,一直以来,我都认为slice的性能肯定要低于for循环,因为slice本身是数组切割方法,内部应该也是用了for循环的(猜的,我并不是一个看源码、原理的人…),既然都用了循环,slice方法还要包装然后返回,那肯定原生的for循环效率更高啦!(女孩子的脑回路~~)

然后终于,今天把我的工作做完了想放松一下,月初刚开始尝试写博客,十天时间访问量就有1000+了,把我唬得杠杠的,我就屁颠屁颠跑来更新博客了。。。。

写完才发现控制的变量错误了,一直都是控制的拷贝次数,最后及时补上了数组长度的变量控制,只是没图啦,不想删,写了好久的

说回正题吧,

数组拷贝性能对比
首先,定义了一个基础的数组,里面内容是基本的数字、字符什么的(只要不是数组,对象就行),
然后定义了两个新的数组A、B
A数组用于for循环产生数组,B数组用于slice生成数组,
for循环拷贝数组性能
这里利用for循环直接赋值给A数组,循环10万次,用time来记录过程所花费的时间,下面更改一个数组的值,再看原数组的值有没有变化。

slice拷贝数组
这里利用slice函数生成新的数组,循坏次数以及其他操作都跟for循环相同,

结果:
for循环与slice循环对比
我试了几次,大致的结果跟这个差不多,循环10万次以上结果跟我想象的一样,for循环更优,接下来我把循环次数更改为1万次:
for循环与slice循环对比
然后更改了一下次数,发现在5万次左右,两者性能差不多~5万次以下for循环就不如slice了

接下来是最讨厌的总结时间啦:
在拷贝长度小的数组时,slice方法更优(谁没事去拷贝几万次数组),当然,实在要拷贝上万次数组那应该是for循环更优一点,大数组相反

我发现我的控制变量法从一开始变量就找错了,所以自己及时补拙,又加了数组大小作为控制变量,结果,不管数组有多长,拷贝的次数为1的情况下,居然都是slice更优!看来我最初对slice的工作原理的理解就有误。。。

其实吧,对于我们这种渣渣码农,才不想管什么性能呢,又不是大量数据操作,只能说,谁简单用谁,所以我选slice,然后今天做功课的时候发现还有concat方法也可以

同样的方法测了一下,发现不管数组长度大还是小,都是slice方法更优,长度1万左右的时候,slice和concat差不多,一万以上就还是slice更优了

碎碎念:比较concat、for和slice的时候,我居然生出了一种念头:好像这种状况似曾相识!原来是以前就比较过的,只是忘记了,所以写博客记录一下是多么地重要,感谢CSDN让我有了一个好笔头!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章