數(shù)據(jù)結(jié)構(gòu):數(shù)組詳細(xì)介紹橘洞,你足夠了解數(shù)組的特性和使用場(chǎng)景嗎?

基本介紹

定義

數(shù)組是一種線性表數(shù)據(jù)結(jié)構(gòu)说搅,它用一組連續(xù)的內(nèi)存空間炸枣,來(lái)存儲(chǔ)一組具有相同類型的數(shù)據(jù)。

特性

從定義可以看出弄唧,數(shù)組的特性主要有兩個(gè):

  1. 線性表
    線性表的定義-百度百科:
    線性表是最基本适肠、最簡(jiǎn)單、也是最常用的一種數(shù)據(jù)結(jié)構(gòu)候引。線性表是數(shù)據(jù)結(jié)構(gòu)的一種侯养,一個(gè)線性表是n個(gè)具有相同特性的數(shù)據(jù)元素的有限序列。
    從這句話我們可以知道:
    a. 線性表是一個(gè)序列澄干。
    b. 線性表是有限的逛揩。
    c. 線性表的數(shù)據(jù)元素具有相同的特性。
    常見的線性表:數(shù)組麸俘,鏈表辩稽,隊(duì)列,棧等从媚。

  2. 連續(xù)的內(nèi)存空間逞泄, 相同類型的數(shù)據(jù):我們平時(shí)使用最多的元素隨機(jī)訪問(wèn),就是歸功于數(shù)組的這個(gè)特性。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)
  1. 支持隨機(jī)訪問(wèn): 如上文所說(shuō)喷众,數(shù)組存于連續(xù)的地址空間各谚,并且存儲(chǔ)的是相同類型的數(shù)據(jù),這使得數(shù)組可以通過(guò)下標(biāo)與數(shù)據(jù)類型的大小直接定位到數(shù)據(jù)位置到千。假設(shè)數(shù)組a的數(shù)據(jù)類型大小為size昌渤,那么可以得到第i 個(gè)元素的起始地址為:

     a[i]_addr = base_addr + i * size
    
缺點(diǎn)
  1. 插入效率低
    因?yàn)閿?shù)組要保證插入后數(shù)據(jù)的連續(xù)性,需要將插入位置后面的數(shù)據(jù)依次向后進(jìn)行移動(dòng)憔四,所以插入的效率很低愈涩。插入時(shí)最好的情況是在數(shù)組末尾插入,時(shí)間復(fù)雜度為O(1)加矛;最壞的情況是在數(shù)組起始位置插入,時(shí)間復(fù)雜度為O(n)煤篙;插入的平均時(shí)間復(fù)雜度為 (1+2+...+n)/n = O(n)斟览。
    數(shù)組插入數(shù)據(jù)示例圖

優(yōu)化方法:如果數(shù)組內(nèi)元素不要求有序時(shí),可以將原數(shù)組中第k個(gè)數(shù)據(jù)插入到數(shù)組末尾辑奈,然后將想要插入的數(shù)據(jù)插入到第k個(gè)位置即可苛茂。如上圖示例,可以將元素b插入到數(shù)組末尾鸠窗,再將f插入到b原來(lái)的位置妓羊。

  1. 刪除效率低
    也是因?yàn)橐WC刪除后數(shù)據(jù)的連續(xù)性,需要將刪除位置后面的元素依次向前進(jìn)行移動(dòng)稍计,所以刪除的時(shí)間復(fù)雜度和插入一樣躁绸。即最好的情況是刪除末尾數(shù)據(jù),時(shí)間復(fù)雜度為O(1)臣嚣;最壞的情況是刪除起始位置數(shù)據(jù)净刮,時(shí)間復(fù)雜度為O(n);刪除的平均時(shí)間復(fù)雜度為O(n)硅则。
    數(shù)組刪除數(shù)據(jù)示例圖

優(yōu)化方法:在允許數(shù)組內(nèi)存在無(wú)用數(shù)據(jù)的前提下淹父,需要?jiǎng)h除多個(gè)數(shù)據(jù)時(shí)可以采用標(biāo)記刪除法,即先不進(jìn)行實(shí)際刪除操作怎虫,而是先將所有需要?jiǎng)h除的數(shù)據(jù)標(biāo)記為被刪除狀態(tài)暑认,最后再進(jìn)行一次刪除操作清除掉所有被標(biāo)記的元素。
上面的優(yōu)化思路可以參考jvm的垃圾收集算法:jvm的垃圾回收算法中最基礎(chǔ)的收集算法是’標(biāo)記-清除‘算法大审。顧名思義蘸际,標(biāo)記清除算法分為’標(biāo)記‘和’清除‘兩個(gè)階段:首先標(biāo)記出所有需要回收的對(duì)象,在標(biāo)記完成后統(tǒng)一回收所有被標(biāo)記的對(duì)象饥努,參考下圖:

標(biāo)記-清除算法示例圖

注意點(diǎn)

  1. 嚴(yán)格上來(lái)說(shuō)捡鱼,數(shù)組不是隨機(jī)查找的時(shí)間復(fù)雜度為O(1),而是隨機(jī)訪問(wèn)的時(shí)間復(fù)雜度為O(1)。
  2. 使用數(shù)組進(jìn)行隨機(jī)訪問(wèn)時(shí)驾诈,一定要對(duì)數(shù)組越界訪問(wèn)時(shí)刻保持警惕缠诅,不然可能會(huì)有意想不到的后果。

參考資料

最近在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法備戰(zhàn)下一家公司的面試乍迄,做了一些總結(jié)并查閱了一些參考資料:

  1. 極客時(shí)間-數(shù)據(jù)結(jié)構(gòu)與算法專欄
  2. 百度百科
  3. 深入理解java虛擬機(jī)

我想說(shuō)

第一次寫技術(shù)文章管引,主要目的還是鍛煉一下自己的寫作與總結(jié)能力,希望可以借此機(jī)會(huì)激勵(lì)下自己闯两,多讀讀書褥伴,少玩點(diǎn)游戲 (?????)
大家有什么意見歡迎指出,我會(huì)虛心接受的漾狼。???

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末重慢,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子逊躁,更是在濱河造成了極大的恐慌似踱,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稽煤,死亡現(xiàn)場(chǎng)離奇詭異核芽,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)酵熙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門轧简,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人匾二,你說(shuō)我怎么就攤上這事哮独。” “怎么了假勿?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵借嗽,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我转培,道長(zhǎng)恶导,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任浸须,我火速辦了婚禮惨寿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘删窒。我一直安慰自己裂垦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布肌索。 她就那樣靜靜地躺著蕉拢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晕换,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天午乓,我揣著相機(jī)與錄音,去河邊找鬼闸准。 笑死益愈,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的夷家。 我是一名探鬼主播蒸其,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼库快!你這毒婦竟也來(lái)了摸袁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤义屏,失蹤者是張志新(化名)和其女友劉穎但惶,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體湿蛔,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年县爬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了阳啥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡财喳,死狀恐怖察迟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情耳高,我是刑警寧澤扎瓶,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站泌枪,受9級(jí)特大地震影響概荷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜碌燕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一误证、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧修壕,春花似錦愈捅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春譬巫,著一層夾襖步出監(jiān)牢的瞬間咖楣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工缕题, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留截歉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓烟零,卻偏偏與公主長(zhǎng)得像瘪松,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子锨阿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容