溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

java數(shù)據(jù)結(jié)構(gòu)之物理上的存儲(chǔ)結(jié)構(gòu)

發(fā)布時(shí)間:2021-10-18 17:39:02 來源:億速云 閱讀:143 作者:iii 欄目:編程語言

這篇文章主要講解了“java數(shù)據(jù)結(jié)構(gòu)之物理上的存儲(chǔ)結(jié)構(gòu)”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“java數(shù)據(jù)結(jié)構(gòu)之物理上的存儲(chǔ)結(jié)構(gòu)”吧!

正文

物理存儲(chǔ)結(jié)構(gòu),是數(shù)據(jù)的邏輯結(jié)構(gòu)在計(jì)算機(jī)中的存儲(chǔ)形式。

但是在理解物理上的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)之前,我們要先對(duì)硬盤有一個(gè)足夠的了解。

硬盤是一個(gè)實(shí)際存在的物品,那么也就是說,這個(gè)硬盤不可能如我們想象出的邏輯設(shè)計(jì)那樣,去存儲(chǔ)我們的數(shù)據(jù)。想象一下,如果存一百萬條數(shù)據(jù),我們?cè)谟脖P中隨意存儲(chǔ),不按照客觀的物理規(guī)則來存儲(chǔ),那么我們會(huì)發(fā)現(xiàn),硬盤的空間會(huì)被很大的浪費(fèi)掉。

也因此,在硬盤中存儲(chǔ)數(shù)據(jù)的時(shí)候,我們必須按照一定的客觀規(guī)律來。而這種客觀規(guī)律,在計(jì)算機(jī)發(fā)展的過程中,逐漸形成了現(xiàn)在比較常見的兩種規(guī)律。

1.順序存儲(chǔ)結(jié)構(gòu)

順序存儲(chǔ)結(jié)構(gòu),是將我們邏輯上的數(shù)據(jù)結(jié)構(gòu)中相鄰的數(shù)據(jù),在物理位置上,也存儲(chǔ)在相鄰的位置。數(shù)據(jù)結(jié)構(gòu)中的節(jié)點(diǎn)關(guān)系由存儲(chǔ)單元的鄰接關(guān)系來體現(xiàn)。

也就是說,數(shù)據(jù)間的邏輯關(guān)系和物理關(guān)系是一致的。

一般來說,在我們java語言中,描述這種物理存儲(chǔ)結(jié)構(gòu)的話,都是借助我們的 數(shù)組 來闡述的。如圖所示: java數(shù)據(jù)結(jié)構(gòu)之物理上的存儲(chǔ)結(jié)構(gòu)

這種存儲(chǔ)結(jié)構(gòu),還是很好理解的,說白了,就是排隊(duì)而已,每一條數(shù)據(jù)都是占一小段空間,按照順序站好,占據(jù)著連續(xù)的存儲(chǔ)空間。

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

順序存儲(chǔ)結(jié)構(gòu)的優(yōu)點(diǎn)還是比較明顯的,由于是按照物理上的存儲(chǔ)空間的順序存儲(chǔ)數(shù)據(jù),那么對(duì)存儲(chǔ)空間的利用率就會(huì)非常高,存儲(chǔ)密度比較大。

而且因?yàn)槭琼樞虼鎯?chǔ)數(shù)據(jù),那么也就是說,我們的數(shù)據(jù),存儲(chǔ)在這里的時(shí)候,天然在硬盤中的平均尋道時(shí)間中,就會(huì)快很多。

那么,什么是尋道時(shí)間呢? 先看一張關(guān)于磁盤的圖片,如下:

java數(shù)據(jù)結(jié)構(gòu)之物理上的存儲(chǔ)結(jié)構(gòu)

我們發(fā)現(xiàn),這種傳統(tǒng)的硬盤,數(shù)據(jù)是存儲(chǔ)到磁盤中的磁道(磁盤盤片)中,通過磁頭(讀寫磁頭)來查找數(shù)據(jù)。而平均尋道時(shí)間就是指磁頭移動(dòng)到數(shù)據(jù)所在的磁道所使用的時(shí)間的平均值。

如果硬盤的尋道速度變快,那么就意味著我們的查找數(shù)據(jù)能力也在變快。

而在我們的順序存儲(chǔ)結(jié)構(gòu)中,我們的數(shù)據(jù)是按照磁道的輪轉(zhuǎn)順序存儲(chǔ)到磁道上的,也就是說,當(dāng)我們進(jìn)行數(shù)據(jù)查找的時(shí)候,會(huì)更快的定位到實(shí)際的數(shù)據(jù)所在,這也就是意味著我們的數(shù)據(jù)查找速度變快。

<table><tr><td> 小知識(shí);

在現(xiàn)代的計(jì)算機(jī)進(jìn)化過程中,數(shù)據(jù)的存儲(chǔ)有了很大的變化,比如說我們現(xiàn)在比較常見的固態(tài)硬盤,由于SSD固態(tài)硬盤沒有磁頭,所以幾乎不存在尋道時(shí)間這一概念,當(dāng)系統(tǒng)發(fā)出指令時(shí),不需要磁頭和盤片,而是直接從Flash顆粒上讀取,相對(duì)傳統(tǒng)的機(jī)械硬盤的尋道時(shí)間來說要快多了。

</td></tr></table>

順序存儲(chǔ)結(jié)構(gòu)的優(yōu)點(diǎn)總結(jié)如下:

  1. 數(shù)據(jù)存儲(chǔ)密度大,存儲(chǔ)空間的利用率要大。

  2. 查找速度比較快。

1.2 缺點(diǎn)

首先我們知道的是,順序存儲(chǔ)結(jié)構(gòu),存儲(chǔ)的數(shù)據(jù),在存儲(chǔ)空間中,是連續(xù)的,如下圖所示; java數(shù)據(jù)結(jié)構(gòu)之物理上的存儲(chǔ)結(jié)構(gòu)

那么當(dāng)我們要插入一條數(shù)據(jù)的時(shí)候,會(huì)怎么樣呢?如圖所示:

java數(shù)據(jù)結(jié)構(gòu)之物理上的存儲(chǔ)結(jié)構(gòu)

從圖所示的插入過程中,我們發(fā)現(xiàn),自插入位置起,后面的所有數(shù)據(jù)元素都往后面移動(dòng)了一位,想一想,如果數(shù)據(jù)量上去了,那么等于大量的數(shù)據(jù)都要移動(dòng),而且實(shí)際的情況,遠(yuǎn)遠(yuǎn)比這個(gè)更糟糕,所以這樣的插入效率,可想而知。

而刪除的過程,雖然和插入恰恰相反,但是造成的后果,都是一樣的,都是會(huì)導(dǎo)致大量的數(shù)據(jù)移動(dòng)位置。

也因此,我們知道的是,順序存儲(chǔ)結(jié)構(gòu)的缺點(diǎn),就是在插入或者是刪除的時(shí)候,效率會(huì)比較低。

2. 鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)

在實(shí)際的數(shù)據(jù)操作過程中,有的數(shù)據(jù)結(jié)構(gòu)需要的是查找的時(shí)候速度快一點(diǎn),那么我們的順序存儲(chǔ)結(jié)構(gòu)是符合這種需求的,但是也有很多時(shí)候,我們的數(shù)據(jù)會(huì)被多次刪除也會(huì)被多次的插入,這就引發(fā)了一個(gè)問題,順序存儲(chǔ)結(jié)構(gòu)不能滿足這種需求場(chǎng)景,于是就出現(xiàn)了鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。

鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)是將數(shù)據(jù)元素存放在任意的存儲(chǔ)單元里,這組存儲(chǔ)單元可以是連續(xù)的,也可以是不連續(xù)的。

也就是說,在鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)中,數(shù)據(jù)是可以放到這個(gè)存儲(chǔ)空間的任意位置,也因此,數(shù)據(jù)與數(shù)據(jù)之間物理位置的關(guān)系,不能表達(dá)出數(shù)據(jù)之間的邏輯關(guān)系。

那么,要如何解決這種邏輯關(guān)系呢?

于是在鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)中,會(huì)將一個(gè)數(shù)據(jù)單元,分為兩個(gè)區(qū)域,一個(gè)數(shù)據(jù)域,一個(gè)指針域。

數(shù)據(jù)域存儲(chǔ)的就是我們實(shí)際的數(shù)據(jù),而指針域則存儲(chǔ)的是關(guān)聯(lián)的其他數(shù)據(jù)的位置的指針,如果要通過鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)存儲(chǔ)數(shù)據(jù) [A , B , C , D , E] ,存儲(chǔ)的大概模型如圖所示: java數(shù)據(jù)結(jié)構(gòu)之物理上的存儲(chǔ)結(jié)構(gòu)

在這張圖的基礎(chǔ)上,經(jīng)過轉(zhuǎn)變后,將圖變?yōu)槿缦碌臉幼樱?java數(shù)據(jù)結(jié)構(gòu)之物理上的存儲(chǔ)結(jié)構(gòu) 這樣可以看的出來,指針域指向了下一個(gè)數(shù)據(jù)節(jié)點(diǎn),也就是說,在連式存儲(chǔ)結(jié)構(gòu)中,數(shù)據(jù)之間的關(guān)系,是通過指針域的指向關(guān)系來表現(xiàn)的,和數(shù)據(jù)實(shí)際存儲(chǔ)的位置沒有關(guān)系。

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

鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的優(yōu)點(diǎn)是很好理解的,先看鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的插入圖: java數(shù)據(jù)結(jié)構(gòu)之物理上的存儲(chǔ)結(jié)構(gòu)

由于鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)中,數(shù)據(jù)的關(guān)系不是由數(shù)據(jù)的實(shí)際存儲(chǔ)位置表示的,而是由各個(gè)數(shù)據(jù)節(jié)點(diǎn)的指針域來表示的,那么也就是說,在數(shù)據(jù)插入或者刪除的時(shí)候,不需要將插入數(shù)據(jù)后面的數(shù)據(jù)移動(dòng),只需要修改一下指針域的指向性就可以了。 java數(shù)據(jù)結(jié)構(gòu)之物理上的存儲(chǔ)結(jié)構(gòu)

也就是說,鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的插入或者刪除元素很方便,比較靈活。而且我們看到的是,鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)不需要連續(xù)的內(nèi)存來存儲(chǔ),也就是說,對(duì)碎片型的內(nèi)存的利用效率還是相對(duì)比較高的。

2.2 缺點(diǎn)

在順序存儲(chǔ)結(jié)構(gòu)中,數(shù)據(jù)的存儲(chǔ)就只需要存儲(chǔ)這個(gè)數(shù)據(jù)就行。但是在鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)中,數(shù)據(jù)的存儲(chǔ),除了存儲(chǔ)的是這個(gè)數(shù)據(jù)外,還需要存儲(chǔ)和這個(gè)數(shù)據(jù)相關(guān)的指針域。 java數(shù)據(jù)結(jié)構(gòu)之物理上的存儲(chǔ)結(jié)構(gòu)

這樣,就相比于順序存儲(chǔ)結(jié)構(gòu)外,鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)多存儲(chǔ)了一部分其他的數(shù)據(jù),所以對(duì)存儲(chǔ)空間的利用率就會(huì)降低。

而且要注意的是,鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),在物理邏輯上講,因?yàn)閷?shí)際存儲(chǔ)的位置不是順序的,那么讀取的時(shí)候,效率會(huì)比較低。

總結(jié)

3.1 順序存儲(chǔ)結(jié)構(gòu)

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

  1. 數(shù)據(jù)存儲(chǔ)密度大,存儲(chǔ)空間的利用率要大。

  2. 查找速度比較快。 缺點(diǎn):

  3. 插入或者是刪除的時(shí)候,效率會(huì)比較低

3.2 鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)

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

  1. 插入或者刪除的時(shí)候,效率比較高

  2. 對(duì)碎片型的內(nèi)存利用率高。 缺點(diǎn):

  3. 額外新增了指針域的數(shù)據(jù),對(duì)內(nèi)存的消耗大

  4. 在讀取的時(shí)候效率比較低。

感謝各位的閱讀,以上就是“java數(shù)據(jù)結(jié)構(gòu)之物理上的存儲(chǔ)結(jié)構(gòu)”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)java數(shù)據(jù)結(jié)構(gòu)之物理上的存儲(chǔ)結(jié)構(gòu)這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI