更新時(shí)間:2020-09-14 16:15:03 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽3337次
Java中有幾種常用的數(shù)據(jù)結(jié)構(gòu),主要分為Collection和map兩個(gè)主要接口(接口只提供方法,并不提供實(shí)現(xiàn)),程序中最終使用的數(shù)據(jù)結(jié)構(gòu)是繼承自這些接口的數(shù)據(jù)結(jié)構(gòu)類。

ArrayList、LinkedList、Vector有什么區(qū)別?
ArrayList
1)只能裝入引用對(duì)象(基本類型要轉(zhuǎn)換為封裝類);
2)線程不安全;
3)底層由數(shù)組實(shí)現(xiàn)(順序表),因?yàn)橛身樞虮韺?shí)現(xiàn),所以會(huì)具備順序表的特點(diǎn),如:需要聲明長(zhǎng)度、超出長(zhǎng)度時(shí)需要進(jìn)行擴(kuò)容、不適合頻繁的移動(dòng)刪除元素、檢索元素快;
4)capacity默認(rèn)為10,超出時(shí),capacity自動(dòng)增長(zhǎng)0.5倍(oldCapacity>>1)。
Vector:
1)只能裝入引用對(duì)象(基本類型要轉(zhuǎn)換為封裝類);
2)Vector通過(guò)synchronized方法保證線程安全;
3)底層也由數(shù)組實(shí)現(xiàn);
4)capacity默認(rèn)為10(在構(gòu)造方法中),超出時(shí)增長(zhǎng)capacityIncrement的量,capacityIncrement小于等于0時(shí),則增長(zhǎng)1倍((capacityIncrement>0)?capacityIncrement:oldCapacity)。
LinkedList
1)只能裝入引用對(duì)象(基本類型會(huì)轉(zhuǎn)換為封裝類);
2)線程不安全;
3)底層實(shí)現(xiàn)為鏈表,具備鏈表的特點(diǎn),如:不用聲明長(zhǎng)度、檢索性能較差,但是插入移動(dòng)刪除較快。
4)鏈表通過(guò)Node對(duì)象實(shí)現(xiàn)。
鏈表與數(shù)組的區(qū)別
數(shù)組在使用之前必須定義大小,而且不能動(dòng)態(tài)定義大小,會(huì)造成給數(shù)組分配了太多的單元而浪費(fèi)了寶貴的資源,糟糕的一面是,程序運(yùn)行時(shí)需要處理的數(shù)據(jù)可能多于數(shù)組的單元。
當(dāng)需要?jiǎng)討B(tài)的減少或增加數(shù)據(jù)項(xiàng)時(shí),可以使用鏈表這種數(shù)據(jù)結(jié)構(gòu)。
為什么使用散列表?
對(duì)于數(shù)組和鏈表這兩種數(shù)據(jù)結(jié)構(gòu),如果要查找它們存儲(chǔ)的某個(gè)特定元素卻不知道它的位置,就需要從頭開始訪問(wèn)元素直到找到匹配的為止;如果數(shù)據(jù)結(jié)構(gòu)中包含很多的元素,就會(huì)浪費(fèi)時(shí)間。這時(shí)最好使用散列表來(lái)存儲(chǔ)要查找的數(shù)據(jù)。
List接口主要實(shí)現(xiàn)類包括:
ArrayList():代表長(zhǎng)度可以改變得數(shù)組??梢詫?duì)元素進(jìn)行隨機(jī)的訪問(wèn),向ArrayList()中插入與刪除元素的速度慢。
LinkedList():在實(shí)現(xiàn)中采用鏈表數(shù)據(jù)結(jié)構(gòu)。插入和刪除速度快,訪問(wèn)速度慢。
對(duì)于List的隨機(jī)訪問(wèn)來(lái)說(shuō),就是只隨機(jī)來(lái)檢索位于特定位置的元素。List的get(int index)方法放回集合中由參數(shù)index指定的索引位置的對(duì)象,下標(biāo)從“0”開始。最基本的兩種檢索集合中的所有對(duì)象的方法。
使用HashSet判斷主鍵是否存在
HashSet實(shí)現(xiàn)Set接口,由哈希表(實(shí)際上是HashMap)實(shí)現(xiàn),但不保證set的迭代順序,并允許使用null元素。HashSet的時(shí)間復(fù)雜度跟HashMap一致,如果沒(méi)有哈希沖突則時(shí)間復(fù)雜度為O(1),如果存在哈希沖突則時(shí)間復(fù)雜度不超過(guò)O(n)。所以,在日常編碼中,可以使用HashSet判斷主鍵是否存在。
所有Java開發(fā)工程師在日常開發(fā)工作中,離不開Java常用數(shù)據(jù)結(jié)構(gòu),企業(yè)在招聘過(guò)程中也會(huì)考察求職者對(duì)Java數(shù)據(jù)結(jié)構(gòu)的掌握,因此你要對(duì)數(shù)據(jù)結(jié)構(gòu)給予高度重視。

以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“如何學(xué)習(xí)java數(shù)據(jù)結(jié)構(gòu),java數(shù)據(jù)結(jié)構(gòu)的知識(shí)梳理”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)