一篇文章搞定java中集合的經(jīng)典面試題
點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”
優(yōu)質(zhì)文章,第一時(shí)間送達(dá)
66套java從入門(mén)到精通實(shí)戰(zhàn)課程分享
Java中集合的常見(jiàn)問(wèn)題
1.HashMap與HashTable區(qū)別?
在多線程任務(wù)中,HashMap不安全但效率高。HashTable安全但效率低。
2.ArrayList和LinkedlList的區(qū)別?
ArrayList使用的是數(shù)組結(jié)構(gòu),對(duì)于增加刪除慢,查找快。
LinkedList使用的是雙向鏈表結(jié)構(gòu),對(duì)于增加刪除快,查找慢。
3.HashMap構(gòu)造方法中的初始容量,加載因子的理解。
初始容量表示哈希桶的數(shù)量,初始容量要合理,太少會(huì)散列很多次,浪費(fèi)計(jì)算機(jī)性能。太大會(huì)浪費(fèi)內(nèi)存空間。
加載因子通常為0.75,當(dāng)哈希桶中百分之75的桶有數(shù)據(jù),則會(huì)將桶的數(shù)量翻倍。加載因子也要合理,太小會(huì)浪費(fèi)內(nèi)存,但查詢方便。太大雖節(jié)省空間但查詢麻煩。
4.HashMap的底層實(shí)現(xiàn)原理
它是基于哈希表的Map接口的實(shí)現(xiàn)類(lèi)。哈希表是一種對(duì)象數(shù)組加鏈表的數(shù)據(jù)結(jié)構(gòu),我們寫(xiě)的每一個(gè)類(lèi)都最好重寫(xiě)hashcode方法,每一個(gè)對(duì)象調(diào)用此方法都會(huì)返回唯一的對(duì)象的哈希碼值,對(duì)哈希碼值求余得到對(duì)象數(shù)組的下標(biāo),將對(duì)象存放在對(duì)應(yīng)的哈希桶中,余數(shù)相同則放在同一個(gè)哈希桶,變?yōu)殒湵淼臄?shù)據(jù)結(jié)構(gòu),當(dāng)哈希桶的數(shù)據(jù)量大于8時(shí),從鏈表轉(zhuǎn)換為紅黑二叉樹(shù),當(dāng)哈希桶中的數(shù)據(jù)量少到6時(shí),從紅黑樹(shù)轉(zhuǎn)換為鏈表。HashMap的初始桶數(shù)量16,散列因子0.75。
5.ArrayList和Vector的異同
相同點(diǎn)在于都使用數(shù)組結(jié)構(gòu),增加刪除慢,查找快。不同點(diǎn)在于它們的構(gòu)造方法,ArrayList只能事先確定好集合大小,Vector可以設(shè)置增量,每次數(shù)據(jù)量滿就自動(dòng)擴(kuò)容。
6.Collection、List、HashMap哪個(gè)是接口?描述下他們的作用?
Collection是類(lèi)集中最大的操作接口,與此同等地位的是Map,Iterator.
Collection:單值存取
Map:雙值存取
Iterator:獲取數(shù)據(jù)的方法。
List是接口,與此同等地位的是set接口。兩者區(qū)別在于list中元素允許重復(fù),set不允許。list常用實(shí)現(xiàn)類(lèi):ArrayList和Vector。
HashMap是Map接口的實(shí)現(xiàn)類(lèi)。
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循?CC 4.0 BY-SA?版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接和本聲明。
本文鏈接:
https://blog.csdn.net/weixin_44063572/article/details/108739380


??? ?
感謝點(diǎn)贊支持下哈?
