面試經典題型:調用HashMap的put方法的具體執行流程

在調用put方法時時,有幾個關鍵點需要考慮:

  1. 哈希沖突的發生與解決

    • 哈希沖突指不同的鍵通過哈希函數計算得到相同的哈希值,導致它們應該存放在哈希表的同一個位置。解決沖突的常用方法包括開放尋址法和鏈表法(或其升級形式紅黑樹)。
  2. HashMap的存儲結構

    • HashMap 的底層數據結構通常是數組加鏈表(或紅黑樹)。數組的每個位置稱為桶(bucket),每個桶存儲一個鏈表(或紅黑樹),用來存放哈希沖突的元素。
  3. 是否需要擴容

    • 在不同版本的實現中,HashMap 會根據負載因子來判斷是否需要擴容。負載因子是指當前元素個數與數組容量的比值。一般來說,當元素個數超過負載因子乘以數組容量時,就會觸發擴容操作。
  4. 先添加還是先判斷是否擴容

    • 在 JDK 1.7 和 1.8 中,HashMap 的行為有所不同:
      • JDK 1.7:先判斷是否需要擴容,如果需要擴容則擴容到原來的兩倍大小,然后再進行插入操作。
      • JDK 1.8:先進行插入操作,然后再判斷是否需要擴容。1.8 引入了紅黑樹結構,當鏈表長度超過一定閾值(默認為8)時,鏈表會轉換為紅黑樹,以提高查詢效率。

面試回答流程:

一、第一步

首先根據哈希函數計算得出一個哈希值,然后將哈希值與其數組長度-1進行與運算得出他的數組下標。

二、第二部

分情況討論:

當前數組下標位置是否存放了數據,如果為空直接插入即可。

如果不為空,分情況討論:

(1)如果是1.7版本 hashmap的底層是由數組和鏈表結構組成的。并且鏈表中的插入選擇的是頭插法。

首先再1.7中會先進行判斷數組是否需要擴容(數組中元素的個數超過到了負載因子與數組容量的乘積,一般擴容是擴大到原來的二倍),如果超過就先擴容再添加。

(2)1.8版本是先添加后擴容 因為1.8引入了紅黑樹的結構所以要分情況討論

首先要判斷數組下標位置存放數據的結構是紅黑樹還是鏈表

1、鏈表

1.8版本里 對于鏈表的插入 選擇的是尾插法,會一次遍歷整個鏈表,在這個過程中會同時進行比較看鏈表中是否已經存在了相同的key值 ,存在則直接更新對應的value值,不存在則遍歷整個鏈表在末尾插入。這里需要注意的是如果插入之后鏈表的長度超過了8,就會把鏈表轉換成紅黑樹的結構。

2、紅黑樹

如果是紅黑樹的結構會將key和value封裝成一個紅黑樹節點,也是依次遍歷如果存在key則更新value不存在就添加到對應位置。

插入完畢之后,才會考慮是否需要擴容,需要就擴容,不需要就結束put方法。

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

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

相關文章

CSIP-FTE考試專業題

靶場下載鏈接: https://pan.baidu.com/s/1ce1Kk0hSYlxrUoRTnNsiKA?pwdha1x pte-2003密碼:admin123 centos:root admin123 解壓密碼: PTE考試專用 下載好后直接用vmware打開,有兩個靶機,一個是基礎題&#x…

【CTF-Crypto】數論基礎-02

【CTF-Crypto】數論基礎-02 文章目錄 【CTF-Crypto】數論基礎-021-16 二次剩余1-20 模p下-1的平方根*1-21 Legendre符號*1-22 Jacobi符號*2-1 群*2-2 群的性質2-3 阿貝爾群*2-4 子群2-11 群同態2-18 原根2-21 什么是環2-23 什么是域2-25 子環2-26 理想2-32 多項式環 1-16 二次剩…

打造智慧校園德育管理,提升學生操行基礎分

智慧校園的德育管理系統內嵌的操行基礎分功能,是對學生日常行為規范和道德素養進行量化評估的一個創新實踐。該功能通過將抽象的道德品質轉化為具體可量化的指標,如遵守紀律、尊師重道、團結協作、愛護環境及參與集體活動的積極性等,為每個學…

醫療器械FDA |FDA網絡安全測試具體內容

醫療器械FDA網絡安全測試的具體內容涵蓋了多個方面,以確保醫療器械在網絡環境中的安全性和合規性。以下是根據權威來源歸納的FDA網絡安全測試的具體內容: 一、技術文件審查 網絡安全計劃:制造商需要提交網絡安全計劃,詳細描述產…

Matlab【光伏預測】基于雪融優化算法SAO優化高斯過程回歸GPR實現光伏多輸入單輸出預測附代碼

% 光伏預測 - 基于SAO優化的GPR % 數據準備 % 假設有多個輸入特征 X1, X2, …, Xn 和一個目標變量 Y % 假設數據已經存儲在 X 和 Y 中,每個變量為矩陣,每行表示一個樣本,每列表示一個特征 % 參數設置 numFeatures size(X, 2); % 輸入特征的…

Spring Boot集成easyposter快速入門Demo

1.什么是easyposter? easyposter是一個簡單的,便于擴展的繪制海報工具包 使用場景 在日常工作過程中,通常一些C端平臺會伴隨著海報生成與分享業務。因為隨著移動互聯網的迅猛發展,社交分享已成為我們日常生活的重要組成部分。海報分享作為…

visual studio 2019版下載以及與UE4虛幻引擎配置(過程記錄)(官網無法下載visual studio 2019安裝包)

一、概述 由于需要使用到UE4虛幻引擎,我使用的版本是4.27版本的,其官方默認的visual studio版本是2019版本的,相應的版本對應關系可以通過下面的官方網站對應關系查詢。https://docs.unrealengine.com/4.27/zh-CN/ProductionPipelines/Develo…

MMSegmentation筆記

如何訓練自制數據集? 首先需要在 mmsegmentation/mmseg/datasets 目錄下創建一個自制數據集的配置文件,以我的蘋果葉片病害分割數據集為例,創建了mmsegmentation/mmseg/datasets/appleleafseg.py 可以看到,這個配置文件主要定義…

python:使用matplotlib庫繪制圖像(四)

作者是跟著http://t.csdnimg.cn/4fVW0學習的,matplotlib系列文章是http://t.csdnimg.cn/4fVW0的自己學習過程中整理的詳細說明版本,對小白更友好哦! 四、條形圖 1. 一個數據樣本的條形圖 條形圖:常用于比較不同類別的數量或值&…

3dmax-vray5大常用材質設置方法

3dmax云渲染平臺——渲染100 以高性價比著稱,是預算有限的小伙伴首選。 15分鐘0.2,60分鐘內0.8;注冊填邀請碼【7788】可領30元禮包和免費渲染券 提供了多種機器配置選擇(可以自行匹配環境)最高256G大內存機器,滿足不同用戶需求。 木紋材質 肌理調整&…

函數語意學(The Sematics of Function)

1、非靜態成員函數轉化為非成員函數 c 設計準則之一就是:非靜態成員函數至少和非成員函數有相同的效率。 也就是說下面兩個函數具有相同的效率: float magnitude(const Point3d * this){...}; float Point3d::magnitude(){...};以 float Point3d::mag…

練習9.5 彩票分析

練習 9.14:彩票 創建?個列表或元素,其中包含 10 個數和 5 個字 ?。從這個列表或元組中隨機選擇 4 個數或字?,并打印?條消息, 指出只要彩票上是這 4 個數或字?,就中?獎了。 練習 9.15:彩票分析 可以使…

面試題 05. 替換空格

05. 替換空格 題目描述示例 題解 題目描述 請實現一個函數,把字符串 s 中的每個空格替換成"%20"。 示例 示例1 輸入:s “We are happy.” 輸出:“We%20are%20happy.” 題解 class Solution { public:string replaceSpace(stri…

jQuery 元素選擇器集合

jQuery 提供了一套非常強大的元素選擇器,它們可以以各種方式定位和操作網頁文檔中的元素。 以下是 jQuery 中的一些常用選擇器: 1、基本選擇器 #id:選擇 ID 為 id 的元素。.(類選擇器):選擇具有特定類的…

2.5 OJ 網站的使用與作業全解

目錄 1 OJ 網站如何使用 1.1 注冊賬戶 1.2 登錄賬戶 1.3 做題步驟 2 本節課的 OJ 作業說明 3 章節綜合判斷題 4 課時2作業1 5 課時2作業2 6 課時2作業3 1 OJ 網站如何使用 〇J 是英文 Online Judge 的縮寫,中文翻譯過來是在線判題。當用戶將自己編寫的代碼…

基于XC7VX690T FPGA+ZU15EG SOC的6U VPX總線實時信號處理平臺(支持4路光纖)

6U VPX架構,符合VITA46規范板載高性能FPGA處理器:XC7VX690T-2FFG1927I板載1片高性能MPSOC:XCZU15EG-2FFVB1156I板載1片MCU,進行健康管理、時鐘配置等V7 FPGA外掛2個FMC接口兩片FPGA之間通過高速GTH進行互聯 基于6U VPX總線架構的通…

從零開始做題:神奇的棋盤

題目 打開得到一副adfgvx加密棋盤 觀察txt數據只有1-5,猜測是數字字母坐標轉換,用notepad批量操作一下 解題 AGAXXDAGGVGGVDVADAVXDGADVGDVAADDDDFXAFAFDGDVXXDGGDGGDXDDFDDXVGXADGVDFXVVAADDXDXXADDVGGGXGXXXXGXXGGXGDVVVGGGAGAAAAGAAGGAGDDDAGAGGG…

解釋如單例、工廠、觀察者等常見設計模式在Android開發中的應用。

在Android開發中,設計模式的應用是提升代碼質量、增強可維護性和可擴展性的重要手段。單例模式(Singleton)、工廠模式(Factory)、觀察者模式(Observer)等是其中最為常見且實用的設計模式。下面我…

如何對已經存在的表進行加分區方案分區函數

我參考網上的,寫了2給存儲過程,一個初始創建文分區方案分區函數;一個可以通過作業新增文件組文件件; 但是初始沒有綁定表,網上的都是在創建表是綁定分區方案,但是我的表是已經存在的,怎么綁定 …

Python實現網站IP地址查詢

使用socket庫實現網站的ip地址查詢,以便于使用CC攻擊和DDoS攻擊(鬧著玩的) import socket def get_website_ip(website): try: ip socket.gethostbyname(website) return ip except socket.gaierror: retur…