極客時間課程《數據結構與算法之美》筆記02 - 數組與容器

數組與容器

線性表

每一個線性表上的數據最多隻有前和後兩個方向。數組、鏈表、隊列、棧都是線性表。
與此對應,非線性表指數據之間不是簡單的先後關係。好比:二叉樹、堆、圖等。數組

數組有連續的內存空間和相同類型的數據,這兩個特性可使其「隨機訪問」。性能

糾正知識點:數組和鏈表的區別
鏈表適合插入、刪除,時間複雜度 O (1);數組適合查找,即使是排好序的數組,用二分查找,時間複雜度也是 O (logn)。因此,正確的表述應該是:數組支持隨機訪問,根據下標隨機訪問的時間複雜度爲 O (1)。隊列

容器與數組

Java 中的 ArrayList、C++ STL 中的 vector均是優秀的容器。內存

ArrayList優點:開發

  • 將不少數組操做細節封裝
  • 支持動態擴容

擴容操做耗時,最好建立ArrayList的時候事先指定數據大小。容器

選用ArrayList和數組的區別:
1.Java ArrayList 沒法存儲基本類型,好比 int、long,須要封裝爲 Integer、Long 類,而 Autoboxing、Unboxing 則有必定的性能消耗,因此若是特別關注性能,或者但願使用基本類型,就能夠選用數組。List

  1. 若是數據大小事先已知,而且對數據的操做很是簡單,用不到 ArrayList 提供的大部分方法,也能夠直接使用數組。二叉樹

  2. 當要表示多維數組時,用數組每每會更加直觀。好比 Object [][] array;而用容器的話則須要這樣定義:ArrayList array。 方法

通常業務開發選擇容器就足夠了,省時省力。通常影響不到總體性能。鏈表

數組從0開始編號: 1.偏移地址,0表明偏移量爲0。 2.歷史遺留問題。

相關文章
相關標籤/搜索