每一個線性表上的數據最多隻有前和後兩個方向。數組、鏈表、隊列、棧都是線性表。
與此對應,非線性表指數據之間不是簡單的先後關係。好比:二叉樹、堆、圖等。數組
數組有連續的內存空間和相同類型的數據,這兩個特性可使其「隨機訪問」。性能
糾正知識點:數組和鏈表的區別
鏈表適合插入、刪除,時間複雜度 O (1);數組適合查找,即使是排好序的數組,用二分查找,時間複雜度也是 O (logn)。因此,正確的表述應該是:數組支持隨機訪問,根據下標隨機訪問的時間複雜度爲 O (1)。隊列
Java 中的 ArrayList、C++ STL 中的 vector均是優秀的容器。內存
ArrayList優點:開發
擴容操做耗時,最好建立ArrayList的時候事先指定數據大小。容器
選用ArrayList和數組的區別:
1.Java ArrayList 沒法存儲基本類型,好比 int、long,須要封裝爲 Integer、Long 類,而 Autoboxing、Unboxing 則有必定的性能消耗,因此若是特別關注性能,或者但願使用基本類型,就能夠選用數組。List
若是數據大小事先已知,而且對數據的操做很是簡單,用不到 ArrayList 提供的大部分方法,也能夠直接使用數組。二叉樹
當要表示多維數組時,用數組每每會更加直觀。好比 Object [][] array;而用容器的話則須要這樣定義:ArrayList
通常業務開發選擇容器就足夠了,省時省力。通常影響不到總體性能。鏈表
數組從0開始編號: 1.偏移地址,0表明偏移量爲0。 2.歷史遺留問題。