摘要:的區(qū)別是不可變的,如果嘗試去修改,會(huì)新生成一個(gè)字符串對象,和是可變的是線程安全的,是線程不安全的,所以在單線程環(huán)境下效率會(huì)更高和有哪些區(qū)別首先,他們的底層數(shù)據(jù)結(jié)構(gòu)不同,底層是基于數(shù)組實(shí)現(xiàn)的,底層是基于鏈表實(shí)現(xiàn)的由于底層
1、String、StringBuffer、StringBuilder的區(qū)別
1.String是不可變的,如果嘗試去修改,會(huì)新生成一個(gè)字符串對象,StringBuffer和StringBuilder是可變的
2.StringBuffer是線程安全的,StringBuilder是線程不安全的,所以在單線程環(huán)境下StringBuilder效率會(huì)更高
2、ArrayList和LinkedList有哪些區(qū)別
1.首先,他們的底層數(shù)據(jù)結(jié)構(gòu)不同,ArrayList底層是基于數(shù)組實(shí)現(xiàn)的,LinkedList底層是基于鏈表實(shí)現(xiàn)的
2.由于底層數(shù)據(jù)結(jié)構(gòu)不同,他們所適用的場景也不同,ArrayList更適合隨機(jī)查找,LinkedList更適合刪除和添加,查詢、添加、刪除的時(shí)間復(fù)雜度不同
3.另外ArrayList和LinkedList都實(shí)現(xiàn)了List接口,但是LinkedList還額外實(shí)現(xiàn)了Deque接口,所以LinkedList還可以當(dāng)做隊(duì)列來使用
3、CopyOnWriteArrayList的底層原理是怎樣的
1.首先CopyOnWriteArrayList內(nèi)部也是用過數(shù)組來實(shí)現(xiàn)的,在向CopyOnWriteArrayList添加元素時(shí),會(huì)復(fù)制一個(gè)新的數(shù)組,寫操作在新數(shù)組上進(jìn)行,讀操作在原數(shù)組上進(jìn)行
2.并且,寫操作會(huì)加鎖,防止出現(xiàn)并發(fā)寫入丟失數(shù)據(jù)的問題
3.寫操作結(jié)束之后會(huì)把原數(shù)組指向新數(shù)組
4. CopyOnWriteArrayList允許在寫操作時(shí)來讀取數(shù)據(jù),大大提高了讀的性能,因此適合讀多寫少的應(yīng)用場景,但是CopyOnWriteArrayList會(huì)比較占內(nèi)存,同時(shí)可能讀到的數(shù)據(jù)不是實(shí)時(shí)最新的數(shù)據(jù),所以不適合實(shí)時(shí)性要求很高的場景
4、HashMap的擴(kuò)容機(jī)制原理
1.7版本
1.先生成新數(shù)組
2.遍歷老數(shù)組中的每個(gè)位置上的鏈表上的每個(gè)元素
3.取每個(gè)元素的key,并基于新數(shù)組長度,計(jì)算出每個(gè)元素在新數(shù)組中的下標(biāo)
4.將元素添加到新數(shù)組中去
5.所有元素轉(zhuǎn)移完了之后,將新數(shù)組賦值給HashMap對象的table屬性
1.8版本
1.先生成新數(shù)組
2.遍歷老數(shù)組中的每個(gè)位置上的鏈表或紅黑樹
3.如果是鏈表,則直接將鏈表中的每個(gè)元素重新計(jì)算下標(biāo),并添加到新數(shù)組中去
4.如果是紅黑樹,則先遍歷紅黑樹,先計(jì)算出紅黑樹中每個(gè)元素對應(yīng)在新數(shù)組中的下標(biāo)位置
a.統(tǒng)計(jì)每個(gè)下標(biāo)位置的元素個(gè)數(shù)
b.如果該位置下的元素個(gè)數(shù)超過了8,則生成一個(gè)新的紅黑樹,并將根節(jié)點(diǎn)的添加到新數(shù)組的對應(yīng)位置
c.如果該位置下的元素個(gè)數(shù)沒有超過8,那么則生成一個(gè)鏈表,并將鏈表的頭節(jié)點(diǎn)添加到新數(shù)組的對應(yīng)位置
5.所有元素轉(zhuǎn)移完了之后,將新數(shù)組賦值給HashMap對象的table屬性
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/124762.html
摘要:一基礎(chǔ)接口的意義百度規(guī)范擴(kuò)展回調(diào)抽象類的意義想不想通過一線互聯(lián)網(wǎng)公司面試文檔整理為電子書掘金簡介谷歌求職記我花了八個(gè)月準(zhǔn)備谷歌面試掘金原文鏈接翻譯者 【面試寶典】從對象深入分析 Java 中實(shí)例變量和類變量的區(qū)別 - 掘金原創(chuàng)文章,轉(zhuǎn)載請務(wù)必保留原出處為:http://www.54tianzhisheng.cn/... , 歡迎訪問我的站點(diǎn),閱讀更多有深度的文章。 實(shí)例變量 和 類變量...
摘要:好不容易在月號這天中午點(diǎn)左右接到了來自阿里的面試電話。這里會(huì)不斷收集和更新基礎(chǔ)相關(guān)的面試題,目前已收集題。面試重難點(diǎn)的和的打包過程多線程機(jī)制機(jī)制系統(tǒng)啟動(dòng)過程,啟動(dòng)過程等等掃清面試障礙最新面試經(jīng)驗(yàn)分享,此為第一篇,開篇。 2016 年末,騰訊,百度,華為,搜狗和滴滴面試題匯總 2016 年未,騰訊,百度,華為,搜狗和滴滴面試題匯總 各大公司 Java 后端開發(fā)面試題總結(jié) 各大公司 Jav...
摘要:為什么不是面向?qū)ο蟛皇敲嫦驅(qū)ο?,因?yàn)樗瑐€(gè)原始數(shù)據(jù)類型,例如。自定義類加載器繼承的自定義類加載器。可以像下面這樣指定參數(shù)面試題面向?qū)ο螅惣虞d器,基礎(chǔ)概念它們的關(guān)系如下啟動(dòng)類加載器,實(shí)現(xiàn),沒有父類。自定義類加載器,父類加載器為。 1. 為什么說Java是一門平臺無關(guān)語言? 平臺無關(guān)實(shí)際的含義是一次編寫到處運(yùn)行。Java 能夠做到是因?yàn)樗淖止?jié)碼(byte code)可以運(yùn)行在任何操作...
閱讀 989·2021-11-24 09:39
閱讀 2210·2021-11-16 11:54
閱讀 2091·2021-11-11 17:22
閱讀 2378·2021-09-30 09:55
閱讀 3606·2021-08-12 13:22
閱讀 1633·2019-08-30 15:44
閱讀 1178·2019-08-29 12:12
閱讀 3271·2019-08-27 10:58