陣列:為什麼很多程式語言中陣列都從0開始編號
阿新 • • 發佈:2018-12-13
1.陣列的概念
陣列(Array)是一種線性表資料結構。它用一組連續的記憶體空間,來儲存一組具有相同型別的資料。
線性表:資料排成像一條線一樣的結構。每個線性表上的資料最多隻有前後兩個方向。除了陣列,連結串列、佇列、棧也是線性表結構
非線性表:二叉樹、堆、圖等。之所以叫非線性,是因為,在非線性表中,資料之間並不是簡單的前後關係。
連續的記憶體空間和相同型別的資料。正是因為有這兩個限制,才有了“隨機訪問”的特性。但是有這兩個限制,很多操作變的非常低效。
糾正:陣列適合查詢,根據下標隨機訪問的時間複雜度為O(1)
2.低效的插入和刪除
有序插入:最好O(1)最壞O(n)平均O(n)。資料插入在某個位置,但是其它資料是連續狀態的
無序插入:最好O(1)最壞O(1)平均O(1)
刪除:最好O(1)最壞O(n)平均O(n)
刪除優化:多次刪除集中在一起,提高刪除效率
3.陣列的訪問越界問題:
在上一篇部落格提到過
4容器能否完全替代陣列
相比於數字,java中的ArrayList封裝了陣列的很多操作,並支援動態擴容。一旦超過設定容量,擴容時比較耗記憶體,因為涉及到記憶體申請和資料搬移。 陣列適合的場景: 1) Java ArrayList 的使用涉及裝箱拆箱,有一定的效能損耗,如果特別管柱效能,可以考慮陣列 2) 若資料大小事先已知,並且涉及的資料操作非常簡單,可以使用陣列 3) 表示多維陣列時,陣列往往更加直觀。 4) 業務開發容器即可,底層開發,如網路框架,效能優化。選擇陣列。
5.關於二維陣列定址操作:
二維陣列的維度為m * n,則 a[i][j]_address = base_address + (i * n + j) * type_size