爲什麼數組的下標從 0 開始?

大家好,我是 Tom 哥~

數組,作爲技術同學一定不會陌生。天天和它打交道,閉着眼都認識它。

首先,我們來複習下數組的定義

數組是一組連續內存空間存儲的具有相同類型的數據,整個排列像一條線一樣,是一種線性表數據結構。

那麼,問題來了,數組的下標爲什麼要從 0 開始?從 1 開始行不行?

端好你的小茶杯,開始進入正題

數組之所以廣泛使用,是因爲它支持隨機訪問。

什麼叫隨機訪問?

數據在內存中都是按順序存放的,通過下標直接觸達到某一個元素存放的位置。

公式:

Tom 哥 [n] = base_address + n * data_size

① 讀取上面數組的 【0】位置的 ``
② 讀取上面數組的 【9999】位置的 ``

由於基於計算的內存地址讀取數據,上面兩種情況的耗費的時間是一樣,時間複雜度爲 O(1)

注意:想要使用隨機訪問,一定要滿足兩個條件:  1、連續的內存空間  2、相同類型的數據

知識補充:

隨機訪問對應的是順序訪問

順序訪問:鏈表在內存中不是按順序存放的,而是通過指針連在一起,訪問某一元素,必須從鏈頭開始順着指針才能找到某一個元素。

突然,一個奇怪的念頭冒了出來,假如我們將數組的首個下標從 1 開始 ,會怎麼樣?

我們讀取 下標爲n 的數據

公式:

Tom 哥 [n] =  base_address + (n-1) * data_size

與上面的公式的區別,多了一次 n-1 操作

雖然也能讀取數組中的值,但是多了一次減法的指令運算。

數組是一個最基礎最簡單的數據結構。要知道我們的上層 API 內部很多都會依賴於數組,而互聯網應用又講究一個高併發,一言不合就是千萬級 QPS,如此高頻的訪問量,這個冗餘的減運算 就會放大無數倍,產生巨大的性能損耗。

這樣說,可能大家感受不一定明顯!!!

” 我在馬路邊撿到一分錢,把它交到警察叔叔手裏邊 “。現在再有一分錢,你還會撿嗎,估計很多人都看不上眼,但要是全國人民每人給你一分錢呢

14 億 * 1 分錢 =  1400 萬 人民幣

是不是可以立馬辭職,回家躺平了!

量變引發質變,做軟件開發,我們一定要考慮將性能優化到極致,骨子裏透着工匠精神。


關於我:前阿里架構師,出過專利,競賽拿過獎,CSDN 博客專家,負責過電商交易、社區生鮮、營銷、金融等業務,多年團隊管理經驗,愛思考,喜歡結交朋友

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/auzfRZcP8k_XIfU6-SRaVA