什么是數(shù)組
數(shù)組(Array)是一種線性表數(shù)據(jù)結(jié)構(gòu)。它用一組連續(xù)的內(nèi)存空間,來存儲一組具有相同類型的數(shù)據(jù)儡毕。
線性表(Linear List)
線性表就是數(shù)據(jù)排成像一條線一樣的結(jié)構(gòu)簇捍。每個線性表上的數(shù)據(jù)最多只有前和后兩個方向。其實除了數(shù)組杜漠,鏈表极景、隊列察净、棧等也是線性表結(jié)構(gòu)。
非線性表
比如二叉樹盼樟、堆氢卡、圖等。之所以叫非線性晨缴,是因為译秦,在非線性表中,數(shù)據(jù)之間并不是簡單的前后關(guān)系击碗。
數(shù)組的特征:
連續(xù)的內(nèi)存空間和相同類型的數(shù)據(jù)筑悴。正是因為這兩個限制,它才有了一個堪稱“殺手锏”的特性:“隨機訪問”稍途。但有利就有弊阁吝,這兩個限制也讓數(shù)組的很多操作變得非常低效,比如要想在數(shù)組中刪除晰房、插入一個數(shù)據(jù)求摇,為了保證連續(xù)性,就需要做大量的數(shù)據(jù)搬移工作殊者。
數(shù)組為了保持內(nèi)存數(shù)據(jù)的連續(xù)性与境,會導(dǎo)致插入、刪除這兩個操作比較低效猖吴。數(shù)組本身在定義的時候需要預(yù)先指定大小摔刁,因為需要分配連續(xù)的內(nèi)存空間。
ArrayList海蔽,我們就完全不需要關(guān)心底層的擴容邏輯共屈,ArrayList 已經(jīng)幫我們實現(xiàn)好了。每次存儲空間不夠的時候党窜,它都會將空間自動擴容為 1.5 倍大小拗引。因為擴容操作涉及內(nèi)存申請和數(shù)據(jù)搬移,是比較耗時的幌衣。所以矾削,如果事先能確定需要存儲的數(shù)據(jù)大小,最好在創(chuàng)建 ArrayList 的時候事先指定數(shù)據(jù)大小豁护。
總結(jié):數(shù)組用一塊連續(xù)的內(nèi)存空間哼凯,來存儲相同類型的一組數(shù)據(jù),最大的特點就是支持隨機訪問楚里,但插入断部、刪除操作也因此變得比較低效,平均情況時間復(fù)雜度為 O(n)班缎。在平時的業(yè)務(wù)開發(fā)中蝴光,我們可以直接使用編程語言提供的容器類她渴,但是,如果是特別底層的開發(fā)虱疏,直接使用數(shù)組可能會更合適惹骂。