面試題002-Java-Java集合

面試題002-Java-Java集合

目錄

  • 面試題002-Java-Java集合
    • 題目自測
    • 題目答案
      • 1. 說說 List,Set,Map 三者的區別?三者底層的數據結構?
      • 2. 有哪些集合是線程不安全的?怎么解決呢?
      • 3. 比較 HashSet 、LinkedHashSet 和 TreeSet 三者的異同?
      • 4. HashMap 和 Hashtable 的區別?HashMap 和 HashSet 區別? HashMap 和 TreeMap 區別?
      • 5. HashMap 的底層實現?
      • 6. HashMap 的長度為什么是 2 的冪次方?
      • 7. ConcurrentHashMap 和 Hashtable 的區別?
      • 8. ConcurrentHashMap 線程安全的具體實現方式/底層具體實現?
    • 參考資料

題目自測

  • 1. 說說 List,Set,Map 三者的區別?三者底層的數據結構?
  • 2. 有哪些集合是線程不安全的?怎么解決呢?
  • 3. 比較 HashSet 、LinkedHashSet 和 TreeSet 三者的異同?
  • 4. HashMap 和 Hashtable 的區別?HashMap 和 HashSet 區別? HashMap 和 TreeMap 區別?
  • 5. HashMap 的底層實現?
  • 6. HashMap 的長度為什么是 2 的冪次方?
  • 7. ConcurrentHashMap 和 Hashtable 的區別?
  • 8. ConcurrentHashMap 線程安全的具體實現方式/底層具體實現?

題目答案

1. 說說 List,Set,Map 三者的區別?三者底層的數據結構?

答:List 有序、可以包含重復元素。主要實現類為 ArrayList 底層數據結構為動態數組。
Set 無序,不可以包含重復元素。主要實現類為 HashSet 底層數據結構為哈希表。
Map 存儲鍵值對,鍵不能重復,值可以重復。主要實現類為 HashMap 底層數據結構為數組+鏈表/紅黑樹。

2. 有哪些集合是線程不安全的?怎么解決呢?

答:常見的線程不安全的集合類有 ArrayList,LinkedList,HashSet,TreeSet, HashMap,TreeMap等。
解決辦法有:1.使用concurrent包中的并發集合類,如ConcurrentHashMap等。
2.使用Collections類的靜態方法返回線程安全的集合。
3.使用synchroniza關鍵字對需要同步的代碼塊加鎖。

3. 比較 HashSet 、LinkedHashSet 和 TreeSet 三者的異同?

答:相同點是這三個類都實現了Set接口,都提供了集合的基本操作,都是線程不安全的。
HashSet 底層數據結構為哈希表,元素無序。
LinkedHashSet 底層數據結構為鏈表和哈希表,元素按照插入順序排序,先進先出。
TreeSet 底層數據結構為紅黑樹,按照自然排序或者通過Comparator自定義排序。

4. HashMap 和 Hashtable 的區別?HashMap 和 HashSet 區別? HashMap 和 TreeMap 區別?

答:
HashMap 和 Hashtable :

  • HashMap 線程不安全。可以存儲一個null鍵,和多個null值。初始容量為16,擴容時容量翻倍。
  • Hashtable 線程安全,其中的大部分方法使用synchronized關鍵字修飾。不可以存儲null鍵和值。初始容量為11,擴容時容量變為原來的2n+1。

HashMap 和 HashSet:

  • HashMap 存儲鍵值對,基于哈希表實現。
  • HashSet 僅存儲不重復的元素,基于HashMap實現。

HashMap 和 TreeMap:

  • HashMap 基于哈希表實現,不保證順序,操作時間復雜度為O(1)。
  • TreeMap 基于紅黑樹實現,按照自然排序或者通過Comparator自定義排序,操作時間復雜度為O(log n)。

5. HashMap 的底層實現?

答:它的底層是基于數組+鏈表、JDK8之后還包括紅黑樹來存儲鍵值對。
在存儲數據時,使用鍵的hashCode方法計算哈希值,通過哈希值確定元素在數組中的位置。HashMap會根據數組的占用情況自動的調整容量,當超過閾值時,會進行擴容,大小為原來的兩倍,并將舊數組的所有元素重新計算哈值后放入新數組。如果該位置為空就直接插入,否則就檢查鏈表或者紅黑樹,如果鏈表中已經存在相同的鍵,就更新對應的值,如果不存在相同的鍵,則插入新節點,JDK8以后當鏈表長度超過閾值8時,就將鏈表轉為紅黑樹。

6. HashMap 的長度為什么是 2 的冪次方?

答:HashMap的長度為2的冪次方,主要是為了簡化索引計算、減少哈希沖突和提高性能。通過位運算代替取模運算,可以更高效地計算數組索引,并確保哈希值的均勻分布。

7. ConcurrentHashMap 和 Hashtable 的區別?

答:兩者的區別主要體現在實現線程安全的方式上不同
Hashtable 使用單一鎖機制,使用synchronized關鍵字來實現,適用于低并發場景。
ConcurrentHashMap 采用了一種更復雜的機制,包括CAS操作、分段鎖和sychronized相結合的方式來實現線程安全,提供更高的并發性能。

8. ConcurrentHashMap 線程安全的具體實現方式/底層具體實現?

答:在JDK1.7及之前,采用分段鎖機制,它通過將整個Map分成多個Segment,每個Segment都有自己的鎖,從而允許多線程同時訪問不同的Segment。
在JDK8及以后取消了Segment,采用synchronized和CAS操作直接對哈希表中的節點進行操作,通過更加細粒度的鎖,保證了高效的并發訪問。

參考資料

  • JavaGuide
  • 牛客網-Java面試寶典

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/37605.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37605.shtml
英文地址,請注明出處:http://en.pswp.cn/web/37605.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

簡過網:考一建需要報培訓班嗎?報班費用是多少錢

近幾年來,越來越多的朋友都開始關注和參與備考一建,那么,大家在備考一建時,都報培訓班了嗎?報班的費用是多少錢?接下來,我們一塊來了解一下吧? ? 一、考一建需要報培訓班嗎&#…

【Jetpack】Lifecycle之自定義LifecycleOwner

Lifecycle設計講解 Lifecycle的設計其實十分簡單,主要就是Lifecycle對象和LifecycleOwner接口 Lifecycle用于記錄對象的生命周期,以及在生命周期發生改變時通知外部 LifecycleOwner用于表示對象具備生命周期管理能力 LifecycleOwner的實現方式很簡單&…

賽目科技三度遞表:凈利率及資產回報率不斷下滑,經營成本越來越高

《港灣商業觀察》施子夫 5月29日,北京賽目科技股份有限公司(以下簡稱,賽目科技)第三次遞表港交所,公司擬主板上市,獨家保薦機構為光銀國際。 公開信息顯示,賽目科技此前曾于2022年12月&#x…

Java全套智慧校園系統源碼:核心功能、發展趨勢、基于電子班牌: Android 7.1+小程序:原生開發+多學校Saas 模式

Java全套智慧校園系統源碼:核心功能、發展趨勢、基于電子班牌: Android 7.1小程序:原生開發多學校Saas 模式 智慧校園系統是一個集成了多種功能的綜合性平臺,旨在提升校園內的教學、管理、服務等方面的效率和體驗。那么&#xff…

比較(五)利用python繪制棒棒糖圖

比較(五)利用python繪制棒棒糖圖 棒棒糖圖(Lollipop plot)簡介 棒棒糖圖實際上是修飾后的條形圖。當在處理大量的值,并且當這些值都很高時,棒棒糖圖就很有用。 快速繪制 基于matplotlib import pandas as…

【前端環境1】安裝nvm

【前端環境1】安裝nvm 寫在最前面一、下載nvm二、安裝教程三、驗證nvm安裝 🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻時光,感謝你的陪伴與支持 ~ 🚀 歡迎一起踏上探險之旅,挖掘無限可能,共同成…

狗都能看懂的Reinforcement Learning簡介

文章目錄 一、什么是強化學習二、強化學習的應用 一、什么是強化學習 強化學習的流程可以用上面這張圖來說明:智能體(Agent)對環境進行觀測,然后根據觀測結果(Observation / State)采取相應的動作&#xff…

實現Ubuntu計劃任務的反彈shell

一、實驗環境 Ubuntu:IP地址:192.168.223.156 Kali : IP地址:192.168.223.152 二、編寫crontab計劃任務 在Ubuntu的系統中使用crontab -e命令編寫計劃任務,如下所示: 作用:是將一個交互式的bash …

device_node和platform_device的生成流程

1. machine_desc的匹配 《這篇》有介紹DT_MACHINE_START的一些初始化操作,匹配上就會在后續的初始化中調用DT_MACHINE_START的成員來初始化系統的設備樹,時鐘,中斷等 start_kernelsetup_arch(&command_line);mdesc setup_machine_fdt(…

行列視報表系統制作的報表與廠級監控信息系統(SIS)系統中的報表有什么區別?

廠級監控信息系統是集過程實時監測、優化控制及生產過程管理為一體的廠級自動化信息系統,是處于DCS以及相關輔助程控系統與全廠管理信息系統之間的一套實時廠級監控信息系統,該產品也是本公司的一套獨立產品。 SIS系統中的報表只是其中的一個模塊&#…

混合云管道的未來:集成 MinIO、Tailscale 和 GitHub Actions

數據處理是現代軟件開發的基本實踐。它使團隊能夠自動收集、處理和存儲數據,確保高質量的數據和高效的處理。 在本文中,我們將探討如何建立一個全面的數據處理管道,重點介紹如何使用 Tailscale GitHub Action 進行安全網絡。此設置還將包含 …

植物大戰僵尸雜交版手機下載與安裝全攻略

植物大戰僵尸雜交版是一款深受玩家喜愛的策略冒險游戲,以其豐富的植物種類、多樣的關卡設計和趣味的玩法著稱。本文將為您提供詳細的下載與安裝教程,幫助您快速上手,享受游戲帶來的樂趣。 游戲簡介 植物大戰僵尸雜交版在傳統玩法的基礎上&a…

【機器學習】語音轉文字 - FunASR 的應用與實踐(speech to text)

本文將介紹 FunASR,一個多功能語音識別模型,包括其特點、使用方法以及在實際應用中的表現。我們將通過一個簡單的示例來展示如何使用 FunASR 將語音轉換為文字,并探討其在語音識別領域的應用前景。 一、引言 隨著人工智能技術的不斷發展&am…

linux的安全技術和防火墻

一、安全技術 1.入侵檢測系統:特點式不阻斷網絡訪問,主要式提供報警和事后監督,不主動介入,默默的看著你(相當于360安全衛士) 2.入侵防御系統:透明模式工作,對數據包,網…

平價高性價比藍牙耳機有哪些?盤點好用平價的藍牙耳機推薦

在當今快節奏的生活中,藍牙耳機已經成為人們日常生活中不可或缺的配件,它們不僅讓我們可以在行走、工作或者鍛煉時享受音樂,還提供了便利的通話功能。然而,市面上藍牙耳機種類繁多,價格相差甚遠,大家往往難…

走進開源企業 | 湖南大學OpenHarmony技術實訓活動在開鴻智谷順利舉辦!

6月24日-6月26日,2024開放原子校源行之湖南大學信息科學與工程學院師生走進開源企業實訓交流活動順利落下帷幕。湖南大學信息科學與工程學院的師生代表團一行90人參與了湖南開鴻智谷數字產業有限公司(以下簡稱“開鴻智谷”)與母公司拓維信息系…

HEC-HMS水文模型教程

原文鏈接:HEC-HMS水文模型教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247607904&idx5&sn1a210328a3fc8f941b433674d8fe2c85&chksmfa826787cdf5ee91d01b6981ebd89deac3e350d747d0fec45ce2ef75d7cb8009341c6f55114d&token90645021…

放射性單位請問放射性物質的單位cpm、dpm什么意思

放射性單位請問放射性物質的單位cpm、dpm什么意思?和Ci怎樣換算?現在做同位素,搞不清楚劑量了.  anse7esn 1年前 已收到2個回答舉報 贊 渡海 幼苗 共回答了22個問題采納率:90.9% 舉報 放射性活度單位 放射性核素在單位時間內發生衰變…

vue項目手機錄音

手機實現錄音功能&#xff0c;安卓和蘋果都可。功能&#xff0c;點擊開始錄制錄音后&#xff0c;隨時可以停止錄音&#xff0c;如果不點擊停止最多錄制15秒。 頁面結構 <!--音頻--> <div class"audio-box"><audio id"audioPlayer"controlsc…

修改element-ui日期下拉框datetimePicker的背景色樣式

如圖&#xff1a; 1、修改背景色 .el-date-picker.has-sidebar.has-time { background: #04308D; color: #fff; border: 1px solid #326AFF } .el-date-picker__header-label { color: #ffffff; } .el-date-table th { color: #fff; } .el-icon-d-arrow-left:before { color: …