03 數組:為什么很多編程語言中數組都從0開始編號?
03 數組:為什么很多編程語言中數組都從0開始編號?
一、什么是數組?
數組(Array)是一種線性表數據結構。它用一組連續的內存空間,來存儲一組具有相同類型的數據。
1.線性表:線性表就是數據排成一條線一樣的結構。每個線性表上的數據最多只有前和后兩個方向。除了數組,鏈表、隊列、棧等也是線性表結構。

2.非線性表:比如二叉樹、堆、圖等。之所以叫非線性,是因為,在非線性表中,數據之間并不是簡單的前后關系。

二、容器能否完全替代數組?
1.容器的好處
- 可以將很多數組操作的細節封裝起來
- 如數組插入、刪除數據時需要搬移其他數據等
- 支持動態擴容
- 數組本身在定義的時候需要預先指定大小,因為需要分配連續的內存空間。
- 如果使用 ArrayList,則不需要關心底層的擴容邏輯,ArrayList已經幫我們實現好了,每次存儲空間不夠的時候,它都會將空間自動擴容為1.5倍大小
- 但因為擴容操作涉及內存申請和數據搬移,是比較耗時的,如果事先能確定需要存儲的數據大小,最好在創建 ArrayList 的時候事先指定數據大小
2.更適合數組的場景
1) Java ArrayList 無法存儲基本類型,比如 int、long,需要封裝為 Integer、Long類,而 Autoboxing、Unboxing 則有一定的性能消耗,所以如果特別關注性能,或者希望使用基本類型,就可以選用數組;4
2) 如果數據大小事先已知,并且對數據的操作非常簡單,用不到 ArrayList 提供的大部分方法,也可以直接使用數組;
3) 書寫直觀,當要表示多維數組時,用數組往往會更加直觀。比如 Object[][] array;而用容器的話則需要這樣定義:ArrayList > array。
三、為什么大多數編程語言中,數組要從 0 開始編號,而不是從 1 開始呢?
最主要的原因可能是歷史原因。C 語言設計者用 0 開始計數數組下標,之后的 Java、JavaScript 等高級語言都效仿了 C 語言,或者說,為了在一定程度上減少 C 語言程序員學習 Java 的學習成本,因此繼續沿用了從 0 開始計數的習慣。
四、小結
數組用一塊連續的內存空間,來存儲相同類型的一組數據,最大的特點就是支持隨機訪問,但插入、刪除操作也因此變得比較低效,平均情況時間復雜度為 O(n)。在平時的業務開發中,我們可以直接使用編程語言提供的容器類,但是,如果是特別底層的開發,直接使用數組可能會更合適。

浙公網安備 33010602011771號