大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專(zhuān)注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 Java學(xué)習(xí) 互聯(lián)網(wǎng)Java技術(shù)框架面試題

互聯(lián)網(wǎng)Java技術(shù)框架面試題

更新時(shí)間:2020-02-07 11:47:01 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2495次


  List和Set的區(qū)別


  List,Set都是繼承自Collection接口List特點(diǎn):元素有放入順序,元素可重復(fù),Set特點(diǎn):元素?zé)o放入順序,元素不可重復(fù),重復(fù)元素會(huì)覆蓋掉,(元素雖然無(wú)放入順序,但是元素在set中的位置是有該元素的HashCode決定的,其位置其實(shí)是固定的,加入Set的Object必須定義equals()方法,另外list支持for循環(huán),也就是通過(guò)下標(biāo)來(lái)遍歷,也可以用迭代器,但是set只能用迭代,因?yàn)樗麩o(wú)序,無(wú)法用下標(biāo)來(lái)取得想要的值。)Set和List對(duì)比Set:檢索元素效率低下,刪除和插入效率高,插入和刪除不會(huì)引起元素位置改變。


  List:和數(shù)組類(lèi)似,List可以動(dòng)態(tài)增長(zhǎng),查找元素效率高,插入刪除元素效率低,因?yàn)闀?huì)引起其他元素位置改變


  HashSet是如何保證不重復(fù)的


  向HashSet中add()元素時(shí),判斷元素是否存在的依據(jù),不僅要比較hash值,同時(shí)還要結(jié)合equles方法比較。


  HashSet中的add()方法會(huì)使用HashMap的add()方法。以下是HashSet部分源碼:


互聯(lián)網(wǎng)Java技術(shù)框架面試題


  HashMap是線程安全的嗎,為什么不是線程安全的(最好畫(huà)圖說(shuō)明多線程環(huán)境下不安全)?


  不是線程安全的;如果有兩個(gè)線程A和B,都進(jìn)行插入數(shù)據(jù),剛好這兩條不同的數(shù)據(jù)經(jīng)過(guò)哈希計(jì)算后得到的哈希碼是一樣的,且該位置還沒(méi)有其他的數(shù)據(jù)。所以這兩個(gè)線程都會(huì)進(jìn)入我在上面標(biāo)記為1的代碼中。假設(shè)一種情況,線程A通過(guò)if判斷,該位置沒(méi)有哈希沖突,進(jìn)入了if語(yǔ)句,還沒(méi)有進(jìn)行數(shù)據(jù)插入,這時(shí)候CPU就把資源讓給了線程B,線程A停在了if語(yǔ)句里面,線程B判斷該位置沒(méi)有哈希沖突(線程A的數(shù)據(jù)還沒(méi)插入),也進(jìn)入了if語(yǔ)句,線程B執(zhí)行完后,輪到線程A執(zhí)行,現(xiàn)在線程A直接在該位置插入而不用再判斷。這時(shí)候,你會(huì)發(fā)現(xiàn)線程A把線程B插入的數(shù)據(jù)給覆蓋了。發(fā)生了線程不安全情況。本來(lái)在HashMap中,發(fā)生哈希沖突是可以用鏈表法或者紅黑樹(shù)來(lái)解決的,但是在多線程中,可能就直接給覆蓋了。


  上面所說(shuō)的是一個(gè)圖來(lái)解釋可能更加直觀。如下面所示,兩個(gè)線程在同一個(gè)位置添加數(shù)據(jù),后面添加的數(shù)據(jù)就覆蓋住了前面添加的。


互聯(lián)網(wǎng)Java技術(shù)框架面試題


  如果上述插入是插入到鏈表上,如兩個(gè)線程都在遍歷到最后一個(gè)節(jié)點(diǎn),都要在最后添加一個(gè)數(shù)據(jù),那么后面添加數(shù)劇的線程就會(huì)把前面添加的數(shù)據(jù)給覆蓋住。


互聯(lián)網(wǎng)Java技術(shù)框架面試題


  則在擴(kuò)容的時(shí)候也可能會(huì)導(dǎo)致數(shù)據(jù)不一致,因?yàn)閿U(kuò)容是從一個(gè)數(shù)組拷貝到另外一個(gè)數(shù)組。


  HashMap的擴(kuò)容過(guò)程


  當(dāng)向容器添加元素的時(shí)候,會(huì)判斷當(dāng)前容器的元素個(gè)數(shù),如果大于等于閾值(知道這個(gè)閾字怎么念嗎?不念fa值,念yu值四聲)---即當(dāng)前數(shù)組的長(zhǎng)度乘以加載因子的值的時(shí)候,就要自動(dòng)擴(kuò)容啦。


  擴(kuò)容(resize)就是重新計(jì)算容量,向HashMap對(duì)象里不停的添加元素,而HashMap對(duì)象內(nèi)部的數(shù)組無(wú)法裝載更多的元素時(shí),對(duì)象就需要擴(kuò)大數(shù)組的長(zhǎng)度,以便能裝入更多的元素。當(dāng)然Java里的數(shù)組是無(wú)法自動(dòng)擴(kuò)容的,方法是使用一個(gè)新的數(shù)組代替已有的容量小的數(shù)組,就像我們用一個(gè)小桶裝水,如果想裝更多的水,就得換大水桶。


互聯(lián)網(wǎng)Java技術(shù)框架面試題


  如果cap是2的n次方,則容量為cap,否則為大于cap的第一個(gè)2的n次方的數(shù)。


  HashMap1.7與1.8的區(qū)別,說(shuō)明1.8做了哪些優(yōu)化,如何優(yōu)化的?


  HashMap結(jié)構(gòu)圖

互聯(lián)網(wǎng)Java技術(shù)框架面試題


  在JDK1.7及之前的版本中,HashMap又叫散列鏈表:基于一個(gè)數(shù)組以及多個(gè)鏈表的實(shí)現(xiàn),hash值沖突的時(shí)候,就將對(duì)應(yīng)節(jié)點(diǎn)以鏈表的形式存儲(chǔ)。


  JDK1.8中,當(dāng)同一個(gè)hash值(Table上元素)的鏈表節(jié)點(diǎn)數(shù)不小于8時(shí),將不再以單鏈表的形式存儲(chǔ)了,會(huì)被調(diào)整成一顆紅黑樹(shù)。這就是JDK7與JDK8中HashMap實(shí)現(xiàn)的最大區(qū)別。


  其下基于JDK1.7.0_80與JDK1.8.0_66做的分析


      以上就是動(dòng)力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)小編介紹的“互聯(lián)網(wǎng)Java技術(shù)框架面試題”的內(nèi)容,希望對(duì)大家有幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專(zhuān)業(yè)老師隨時(shí)為你服務(wù)。


相關(guān)推薦


最新最全java面試題及答案(初級(jí)到高級(jí))


史上最全的中高級(jí)JAVA工程師面試題及答案匯總


Java高級(jí)開(kāi)發(fā)工程師面試題


2019史上最全java面試題題庫(kù)大全800題


哪有資深java工程師面試題


提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-06-26 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 国产欧美日韩第一页 | 日本一级毛片高清免费观看视频 | 在线视频a| 欧美高清精品 | 国产成人综合亚洲欧美在 | 中日韩欧美中文字幕毛片 | 99久久99热精品免费观看国产 | 欧美一级夜夜爽 视频 | 亚洲国产精品免费在线观看 | 久久激情免费视频 | 国内精品亚洲 | 欧美色xxx| 综合图区亚洲 | 精品一区二区三区视频在线观看免 | 全部精品孕妇色视频在线 | 日本成人二区 | 狠狠2020 | 久久国产精品国语对白 | 亚洲欧美在线中文字幕不卡 | 日韩城人网站 | 亚洲男人的天堂久久无 | 视频一区在线免费观看 | 欧美精品午夜毛片免费看 | 99久久综合精品免费 | 日本一级毛片高清免费观看视频 | 欧美一级毛片特黄黄 | 香蕉超级碰碰碰97视频蜜芽 | 色老头老太xxxxbbbb | 久久青青视频 | 免费久久久久 | 91国在线视频 | 免费爱爱视频网站 | 欧美人成人亚洲专区中文字幕 | 99精品福利 | 久久精品人人做人人看最新章 | 国产一级特黄高清在线大片 | 狠狠色噜狠狠狠狠 | 亚洲一区在线免费观看 | 国产成人午夜片在线观看 | 日韩精品区 | 久草小区二区三区四区网页 |