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