數組

什麼是數組?

數組是一種線性表數據結構,它用一組連續的內存空間存儲一組相同類型的數據。

定義中牽扯到幾個關鍵詞:

  • 線性表
    線性表就是數據排成像一條線的結構,每個線性表上的數據最多隻有前和後兩個方向。與線性表對立的是非線性表,如二叉樹、堆、圖就是非線性表結構。非線性表中,數據不只是簡單的前後關係。

  • 連續的內存空間和相投的數據類型
    正是因爲這兩個限制,數組才能夠隨機訪問,但這也讓數組的很多操作變得低效,例如數組插入、刪除數據,爲了保證連續性,需要做數據搬移的工作。

數組的隨機訪問:

a[i]_address = base_address + i * data_type_size

base_address是數組首地址,data_type_size是每個元素的大小。因爲相同元素,所以data_type_size相同。這也是爲什麼數組的小標通常從0開始,因爲第一個元素的地址就是數組首地址。

高級語言中,針對數組類型都提供了容器類,如Java中的ArrayList、OC中的NSArray。這些容器類會將很多數組操作的細節封裝起來,這些容器類都支持動態擴容,當存儲空間不夠時自動擴容爲原來的若干倍。擴容涉及內存的申請和數據的搬移,比較耗時,如果事先知道存儲的數據大小,最好在創建時事先指定好數組大小。

當遇到如下情況時優先選擇使用數組:

  • 特別關注性能或希望存儲使用基本數據類型
  • 數據大小事先已知,對數據的操作簡單用不到容器類提供的大部分方法
  • 多維數組時,用數組更加直觀

對於業務開發,使用容器類就足夠了,開發效率更高,損失的一點點性能不影響系統整體的性能。做非常底層的開發,如網絡框架,性能優化要做到極致,優先使用數組。

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