您好,登錄后才能下訂單哦!
這篇文章主要講解了“java數據結構之物理上的存儲結構”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“java數據結構之物理上的存儲結構”吧!
物理存儲結構,是數據的邏輯結構在計算機中的存儲形式。
但是在理解物理上的數據存儲結構之前,我們要先對硬盤有一個足夠的了解。
硬盤是一個實際存在的物品,那么也就是說,這個硬盤不可能如我們想象出的邏輯設計那樣,去存儲我們的數據。想象一下,如果存一百萬條數據,我們在硬盤中隨意存儲,不按照客觀的物理規則來存儲,那么我們會發現,硬盤的空間會被很大的浪費掉。
也因此,在硬盤中存儲數據的時候,我們必須按照一定的客觀規律來。而這種客觀規律,在計算機發展的過程中,逐漸形成了現在比較常見的兩種規律。
順序存儲結構,是將我們邏輯上的數據結構中相鄰的數據,在物理位置上,也存儲在相鄰的位置。數據結構中的節點關系由存儲單元的鄰接關系來體現。
也就是說,數據間的邏輯關系和物理關系是一致的。
一般來說,在我們java語言中,描述這種物理存儲結構的話,都是借助我們的 數組 來闡述的。如圖所示:
這種存儲結構,還是很好理解的,說白了,就是排隊而已,每一條數據都是占一小段空間,按照順序站好,占據著連續的存儲空間。
順序存儲結構的優點還是比較明顯的,由于是按照物理上的存儲空間的順序存儲數據,那么對存儲空間的利用率就會非常高,存儲密度比較大。
而且因為是順序存儲數據,那么也就是說,我們的數據,存儲在這里的時候,天然在硬盤中的平均尋道時間中,就會快很多。
那么,什么是尋道時間呢? 先看一張關于磁盤的圖片,如下:
我們發現,這種傳統的硬盤,數據是存儲到磁盤中的磁道(磁盤盤片)中,通過磁頭(讀寫磁頭)來查找數據。而平均尋道時間就是指磁頭移動到數據所在的磁道所使用的時間的平均值。
如果硬盤的尋道速度變快,那么就意味著我們的查找數據能力也在變快。
而在我們的順序存儲結構中,我們的數據是按照磁道的輪轉順序存儲到磁道上的,也就是說,當我們進行數據查找的時候,會更快的定位到實際的數據所在,這也就是意味著我們的數據查找速度變快。
<table><tr><td> 小知識;
在現代的計算機進化過程中,數據的存儲有了很大的變化,比如說我們現在比較常見的固態硬盤,由于SSD固態硬盤沒有磁頭,所以幾乎不存在尋道時間這一概念,當系統發出指令時,不需要磁頭和盤片,而是直接從Flash顆粒上讀取,相對傳統的機械硬盤的尋道時間來說要快多了。
</td></tr></table>
順序存儲結構的優點總結如下:
數據存儲密度大,存儲空間的利用率要大。
查找速度比較快。
首先我們知道的是,順序存儲結構,存儲的數據,在存儲空間中,是連續的,如下圖所示;
那么當我們要插入一條數據的時候,會怎么樣呢?如圖所示:
從圖所示的插入過程中,我們發現,自插入位置起,后面的所有數據元素都往后面移動了一位,想一想,如果數據量上去了,那么等于大量的數據都要移動,而且實際的情況,遠遠比這個更糟糕,所以這樣的插入效率,可想而知。
而刪除的過程,雖然和插入恰恰相反,但是造成的后果,都是一樣的,都是會導致大量的數據移動位置。
也因此,我們知道的是,順序存儲結構的缺點,就是在插入或者是刪除的時候,效率會比較低。
在實際的數據操作過程中,有的數據結構需要的是查找的時候速度快一點,那么我們的順序存儲結構是符合這種需求的,但是也有很多時候,我們的數據會被多次刪除也會被多次的插入,這就引發了一個問題,順序存儲結構不能滿足這種需求場景,于是就出現了鏈式存儲結構。
鏈式存儲結構是將數據元素存放在任意的存儲單元里,這組存儲單元可以是連續的,也可以是不連續的。
也就是說,在鏈式存儲結構中,數據是可以放到這個存儲空間的任意位置,也因此,數據與數據之間物理位置的關系,不能表達出數據之間的邏輯關系。
那么,要如何解決這種邏輯關系呢?
于是在鏈式存儲結構中,會將一個數據單元,分為兩個區域,一個數據域,一個指針域。
數據域存儲的就是我們實際的數據,而指針域則存儲的是關聯的其他數據的位置的指針,如果要通過鏈式存儲結構存儲數據 [A , B , C , D , E] ,存儲的大概模型如圖所示:
在這張圖的基礎上,經過轉變后,將圖變為如下的樣子: 這樣可以看的出來,指針域指向了下一個數據節點,也就是說,在連式存儲結構中,數據之間的關系,是通過指針域的指向關系來表現的,和數據實際存儲的位置沒有關系。
鏈式存儲結構的優點是很好理解的,先看鏈式存儲結構的插入圖:
由于鏈式存儲結構中,數據的關系不是由數據的實際存儲位置表示的,而是由各個數據節點的指針域來表示的,那么也就是說,在數據插入或者刪除的時候,不需要將插入數據后面的數據移動,只需要修改一下指針域的指向性就可以了。
也就是說,鏈式存儲結構的插入或者刪除元素很方便,比較靈活。而且我們看到的是,鏈式存儲結構不需要連續的內存來存儲,也就是說,對碎片型的內存的利用效率還是相對比較高的。
在順序存儲結構中,數據的存儲就只需要存儲這個數據就行。但是在鏈式存儲結構中,數據的存儲,除了存儲的是這個數據外,還需要存儲和這個數據相關的指針域。
這樣,就相比于順序存儲結構外,鏈式存儲結構多存儲了一部分其他的數據,所以對存儲空間的利用率就會降低。
而且要注意的是,鏈式存儲結構,在物理邏輯上講,因為實際存儲的位置不是順序的,那么讀取的時候,效率會比較低。
優點:
數據存儲密度大,存儲空間的利用率要大。
查找速度比較快。 缺點:
插入或者是刪除的時候,效率會比較低
優點:
插入或者刪除的時候,效率比較高
對碎片型的內存利用率高。 缺點:
額外新增了指針域的數據,對內存的消耗大
在讀取的時候效率比較低。
感謝各位的閱讀,以上就是“java數據結構之物理上的存儲結構”的內容了,經過本文的學習后,相信大家對java數據結構之物理上的存儲結構這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。