數組的拷貝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讓我有了一個好筆頭!

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