更新時(shí)間:2019-12-06 15:19:24 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽3637次
Java數(shù)據(jù)結(jié)構(gòu)
要理解Java數(shù)據(jù)結(jié)構(gòu),必須能清楚何為數(shù)據(jù)結(jié)構(gòu)?
數(shù)據(jù)結(jié)構(gòu):
Data_Structure,它是儲(chǔ)存數(shù)據(jù)的一種結(jié)構(gòu)體,在此結(jié)構(gòu)中儲(chǔ)存一些數(shù)據(jù),而這些數(shù)據(jù)之間有一定的關(guān)系。
而各數(shù)據(jù)元素之間的相互關(guān)系,又包括三個(gè)組成成分,數(shù)據(jù)的邏輯結(jié)構(gòu),數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)和數(shù)據(jù)運(yùn)算結(jié)構(gòu)。
而一個(gè)數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)過(guò)程分成抽象層、數(shù)據(jù)結(jié)構(gòu)層和實(shí)現(xiàn)層。
數(shù)據(jù)結(jié)構(gòu)在Java的語(yǔ)言體系中按邏輯結(jié)構(gòu)可以分為兩大類:線性數(shù)據(jù)結(jié)構(gòu)和非線性數(shù)據(jù)結(jié)構(gòu)。
Java數(shù)據(jù)結(jié)構(gòu)之:線性數(shù)據(jù)結(jié)構(gòu)
線性數(shù)據(jù)結(jié)構(gòu):常見(jiàn)的有一維數(shù)組,線性表,棧,隊(duì)列,雙隊(duì)列,串。
一維數(shù)組
在Java里面常用的util有:String ,int ,ArrayList,Vector,CopyOnWriteArrayList等,及可以通過(guò)一維數(shù)組自己實(shí)現(xiàn)不同邏輯結(jié)構(gòu)的Util類,而ArrayList封裝了一些的基本操作方法。
ArrayList和Vector的區(qū)別是:Vector是線程安全的,方法同步。CopyOnWriteArrayList也是線程安全的但效率要比Vector高很多。
數(shù)組這種數(shù)據(jù)結(jié)構(gòu)典型的操作方法,是根據(jù)下標(biāo)進(jìn)行操作的,所以insert的的時(shí)候可以根據(jù)下標(biāo)插入到具體的某個(gè)位置,但是這個(gè)時(shí)候它后面的元素都得往后面移動(dòng)一位。所以插入效率比較低,更新,刪除效率也比較低,而查詢效率非常高,查詢效率時(shí)間復(fù)雜度是1。
線性表
線性表是有序的儲(chǔ)存結(jié)構(gòu)、鏈?zhǔn)降膬?chǔ)存結(jié)構(gòu)。鏈表的物理儲(chǔ)存空間是不連續(xù)的,鏈表的每一個(gè)節(jié)點(diǎn)都知道上一個(gè)節(jié)點(diǎn)、或者下一個(gè)節(jié)點(diǎn)是誰(shuí),通常用Node表示。常見(jiàn)的有順序鏈表(LinkedList、Linked***),單項(xiàng)鏈表(里面只有Node類),雙向鏈表(兩個(gè)Node類),循環(huán)鏈表(多個(gè)Node類)等。
操作方法:插入效率比較高,插入的時(shí)候只需要改變節(jié)點(diǎn)的前后節(jié)點(diǎn)的連接即可。而查詢效率就比較低了,如果實(shí)現(xiàn)的不好,需要整個(gè)鏈路找下去才能找到應(yīng)該找的元素。所以常見(jiàn)的方法有:add(index,element),addFirst(element),addLast(element),getFirst,getLast,get(element)等。
常見(jiàn)的Uitil有:LinkedList,LinkedMap等,而這兩個(gè)JDK底層也做了N多優(yōu)化,可以有效避免查詢效率低的問(wèn)題,當(dāng)自己實(shí)現(xiàn)的時(shí)候需要注意。其實(shí)樹(shù)形結(jié)構(gòu)可以說(shuō)是非線性的鏈?zhǔn)絻?chǔ)存結(jié)構(gòu)。
棧Stack
棧,最主要的是要實(shí)現(xiàn)先進(jìn)后出,后進(jìn)先出的邏輯結(jié)構(gòu)。來(lái)實(shí)現(xiàn)一些場(chǎng)景對(duì)邏輯順序的要求。所以常用的方法有push(element)壓棧,pop出棧。
java.util.Stack就實(shí)現(xiàn)了這用邏輯,而Java的Jvm里面也用的到了此種數(shù)據(jù)結(jié)構(gòu),就是線程棧,來(lái)保證當(dāng)前線程的執(zhí)行順序。
以上就是動(dòng)力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)小編介紹的“Java數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)方法”的內(nèi)容,希望對(duì)大家有幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
Java全套自學(xué)資料
Java自學(xué)視頻教程(免費(fèi)學(xué)習(xí)):http://www.ilovecolors.com.cn/video.html
Java技術(shù)教程:http://www.ilovecolors.com.cn/tutorial/
相關(guān)文章
零基礎(chǔ)怎么自學(xué)Java,完整版Java學(xué)習(xí)路線圖
你還在糾結(jié)學(xué)Java,是自學(xué)還是去培訓(xùn)班嗎
一個(gè)標(biāo)準(zhǔn)的Java程序員如何進(jìn)階?
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743