馬老師數(shù)據(jù)結(jié)構(gòu)與算法大師課
數(shù)組(Array)
數(shù)組是數(shù)據(jù)結(jié)構(gòu)中最簡單,也是最常用的結(jié)構(gòu),很多編程語言都內(nèi)置數(shù)組。其他數(shù)據(jù)結(jié)構(gòu),比如棧和隊列都是由數(shù)組衍生出來的。下圖展示了 1 個數(shù)組,它有 4 個元素。每一個數(shù)組元素的位置由數(shù)字編號,稱為下標(biāo)或者索引(index)。大多數(shù)編程語言的數(shù)組第一個元素的下標(biāo)是 0。
根據(jù)維度區(qū)分,有兩種不同的數(shù)組:
1??一維數(shù)組(如上圖所示)
2??多維數(shù)組(數(shù)組的元素為數(shù)組)

在 Java 中當(dāng)創(chuàng)建數(shù)組時會在內(nèi)存中劃分出一塊連續(xù)的內(nèi)存,然后當(dāng)有數(shù)據(jù)進(jìn)入的時候會將數(shù)據(jù)按順序的存儲在這塊連續(xù)的內(nèi)存中。當(dāng)需要讀取數(shù)組中的數(shù)據(jù)時,需要提供數(shù)組中的索引,然后數(shù)組根據(jù)索引將內(nèi)存中的數(shù)據(jù)取出來,返回給讀取程序。在Java中并不是所有的數(shù)據(jù)都能存儲到數(shù)組中,只有相同類型的數(shù)據(jù)才可以一起存儲到數(shù)組中。
所有的數(shù)據(jù)結(jié)構(gòu)都支持幾個基本操作:讀取Get、插入Insert、刪除Delete。

因為數(shù)組在存儲數(shù)據(jù)時是按順序存儲的,存儲數(shù)據(jù)的內(nèi)存也是連續(xù)的,所以它的特點就是尋址讀取數(shù)據(jù)比較容易,插入和刪除比較困難。在讀取數(shù)據(jù)時,只需要告訴數(shù)組要從哪個位置(索引)取數(shù)據(jù)就可以了,數(shù)組會直接把想要的位置的數(shù)據(jù)取出來。插入和刪除比較困難是因為這些存儲數(shù)據(jù)的內(nèi)存是連續(xù)的,要插入和刪除就需要變更整個數(shù)組中的數(shù)據(jù)的位置。舉個例子:一個數(shù)組中編號0->1->2->3->4這五個內(nèi)存地址中都存了數(shù)組的數(shù)據(jù),現(xiàn)在需要往4中插入一個數(shù)據(jù),那就代表著從4開始,后面的所有內(nèi)存中的數(shù)據(jù)都要往后移一個位置,相當(dāng)耗時。