Java:一般数据结构
數(shù)據(jù)結(jié)構(gòu)
- 數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)存儲(chǔ)、組織數(shù)據(jù)的方式。
- 數(shù)據(jù)結(jié)構(gòu)是指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。
- 精心選擇的數(shù)據(jù)結(jié)構(gòu)可以帶來(lái)更高的運(yùn)行或者存儲(chǔ)效率。
- 數(shù)據(jù)可夠往往同搞笑的檢索算法和索引技術(shù)有關(guān)。
- Java 中集合框架其實(shí)就是數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)的封裝。
數(shù)據(jù)結(jié)構(gòu)的作用:
1.模擬生活中數(shù)據(jù)的存儲(chǔ)
2.作為程序員開發(fā)的工具
隊(duì)列:
??隊(duì)列是一種特殊的現(xiàn)行表,特殊支出在于它只允許在表的前端(front)進(jìn)行刪除操作,而在表的后端(rear)進(jìn)行插入操作,和棧一樣,隊(duì)列是一種操作受限制的現(xiàn)行類,進(jìn)行插入操作的端成為隊(duì)尾,進(jìn)行刪除操作的端稱為隊(duì)頭。
單向隊(duì)列(Queue):先進(jìn)先出(FLFO),只能從隊(duì)列尾插入數(shù)據(jù),只能從隊(duì)列頭刪除數(shù)據(jù)。 雙向隊(duì)列(Deque):可以從隊(duì)列尾/頭插入數(shù)據(jù),也可以從隊(duì)列頭/尾刪除數(shù)據(jù)。棧(stack)
??又名堆棧,是一種運(yùn)算首先的線性表,后進(jìn)先出(LIFO),其限制是僅允許在表的一端進(jìn)行插入和刪除運(yùn)算。這一端被稱為棧頂,相對(duì)地,把另一端稱為棧底。向一個(gè)棧插入新元素,又稱作進(jìn)棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個(gè)棧刪除元素,又稱作為出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。
哈希表(hashtable)
??在一般的數(shù)組中,元素在數(shù)組中的索引位置是隨機(jī)的,元素的取值和元素的位置之間不存在確定的關(guān)系,因此,在數(shù)組中查找特定的值時(shí),需要把查找值和一些了的元素進(jìn)行比較,此時(shí)的查詢效率依賴于查找過(guò)程中所進(jìn)行的比較次數(shù)。如果元素的值(value)和在數(shù)組中的索引位置(index)有一個(gè)確定的對(duì)應(yīng)關(guān)系(hash)
公式為: index = hash(value);??那么對(duì)應(yīng)給定的值,只要調(diào)用上述的 hash(value) 方法,就能找到數(shù)組中取值為 value 的元素的位置。
??如果數(shù)組中元素的值和索引位置存在對(duì)應(yīng)關(guān)系,這樣的數(shù)組就稱之為哈希表,可以看出哈希表最大的有點(diǎn)是提供查找數(shù)據(jù)的效率。
??一般情況下,是不會(huì)把哈希碼作為元素在數(shù)組中的索引位置,因?yàn)楣4a很大,數(shù)組長(zhǎng)度有限,會(huì)造成索引越界問(wèn)題。此時(shí),可以在哈希碼和元素位置之間做某種映射關(guān)系。
??元素值 –> hash(value) –> 哈希碼 –> 某種映射關(guān)系 –> 元素存儲(chǔ)索引
注:每個(gè)對(duì)象的哈希碼是不同的。
??哈希表的插入和查找是很優(yōu)秀的,可是當(dāng)哈希表接近裝滿時(shí),因?yàn)閿?shù)組的擴(kuò)容問(wèn)題,性能較低(轉(zhuǎn)移到更大的哈希表中)。
Java 加載因子:0.75。
數(shù)組:會(huì)記錄添加順序,按照索引位置來(lái)存儲(chǔ),允許元素重復(fù)。
哈希表:元素是不能重復(fù)的,對(duì)象如果相同則hashCode相同 –> index 相同,不會(huì)記錄元素添加的先后順序。
總結(jié)
以上是生活随笔為你收集整理的Java:一般数据结构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 前端面试题(一)
- 下一篇: java入门123pdf二维码pdf_J