HashMap為什么擴容為原來2倍呢?

1、減少哈希碰撞

核心原因:HashMap的所有設計都依賴于數組長度為2的冪次方這一前提。

  • 索引計算使用 (n-1)&hash ,其中 n 是數組長度
  • 當 n 是 2 的冪次方時,n-1 的二進制形式是全 1(例如,15——>1111)
  • 這使得哈希分布更均勻,減少哈希碰撞概率
  • 擴容為 2 倍能保證新容量仍然是 2 的冪次方
原始容量16: n-1=15 (1111)
擴容后32: n-1=31 (11111)

2、優化元素遷移效率(JDK1.8改進)

  • 元素的新位置只有兩種可能:
    • 保持原位置不變
    • 原位置 + 原容量

為什么呢?

新索引 = e.hash & (newCap - 1)

由于newCap = oldCap << 1,newCap - 1 比 oldCap - 1 多一個高位1

所有只需要看 e.hash 新增的高位是0還是1:

0則索引不變

1則索引? = 原索引 + oldCap

實現優勢:

  • 無序重新計算hash值
  • 只需一次位判斷即可確定新位置
  • 遷移時間復雜度從 O(n) 減低到 O(1)
元素hash值: ... 0001 1101 (低4位1101=13)
oldCap=16(10000), newCap=32(100000)
判斷第5位(從右數第5位):
如果是0: 新位置仍然是13
如果是1: 新位置是13+16=29

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

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

相關文章

debian系統中文輸入法失效解決

在 Debian 9.6 上無法切換中文輸入法的問題通常與輸入法框架&#xff08;如 Fcitx 或 IBus&#xff09;的配置或依賴缺失有關。以下是詳細的解決步驟&#xff1a; 1. 安裝中文語言包 確保系統已安裝中文語言支持&#xff1a; sudo apt update sudo apt install locales sudo…

3DGS之光柵化

光柵化&#xff08;Rasterization&#xff09;是計算機圖形學中將連續的幾何圖形&#xff08;如三角形、直線等&#xff09;轉換為離散像素的過程&#xff0c;最終在屏幕上形成圖像。 一、光柵化的核心比喻 像畫家在畫布上作畫 假設你是一個畫家&#xff0c;要把一個3D立方體畫…

學習51單片機Day02---實驗:點亮一個LED燈

目錄 1.先看原理圖 2.思考一下&#xff08;sbit的使用&#xff09;&#xff1a; 3.給0是要讓這個LED亮&#xff08;LED端口設置為低電平&#xff09; 4.完成的代碼 1.先看原理圖 比如我們要讓LED3亮起來&#xff0c;對應的是P2^2。 2.思考一下&#xff08;sbit的使用&…

Redis與Lua原子操作深度解析及案例分析

一、Redis原子操作概述 Redis作為高性能的鍵值存儲系統&#xff0c;其原子性操作是保證數據一致性的核心機制。在Redis中&#xff0c;原子性指的是一個操作要么完全執行&#xff0c;要么完全不執行&#xff0c;不會出現部分執行的情況。 Redis原子性的實現原理 單線程模型&a…

深入理解 GLOG_minloglevel 與 GLOG_v:原理與使用示例

文章目錄 深入理解 GLOG_minloglevel 與 GLOG_v&#xff1a;原理與使用示例1. GLOG_minloglevel&#xff1a;最低日志等級控制2. GLOG_v&#xff1a;控制 VLOG() 的詳細輸出等級3. GLOG_minloglevel 與 GLOG_v 的優先級關系4. 使用示例4.1 基礎示例&#xff1a;不同日志等級4.2…

Cline Memory Bank 結構化文檔持久化 AI 上下文詳解

&#x1f3ae; 什么是 Cline Memory Bank&#xff1f; Memory Bank 是一個結構化文檔系統&#xff0c;允許 Cline 在會話之間保持上下文。它能讓 Cline 從無狀態的助手轉變為持久記憶的開發伙伴&#xff0c;隨著時間推移有效地“記住”項目細節。 &#x1f5e1;? 關鍵優勢 上…

【JavaScript】面向對象與設計模式

個人主頁&#xff1a;Guiat 歸屬專欄&#xff1a;HTML CSS JavaScript 文章目錄 1. JavaScript 中的面向對象編程1.1 對象基礎1.2 構造函數1.3 原型和原型鏈1.4 ES6 類1.5 繼承1.6 封裝 2. 創建型設計模式2.1 工廠模式2.2 單例模式2.3 建造者模式2.4 原型模式 3. 結構型設計模式…

網絡安全防護技術

邊界安全防護——防火墻 控制&#xff1a;在網絡連接點上建立一個安全控制點&#xff0c;對進出數據進行限制隔離&#xff1a;將需要保護的網絡與不可信任網絡進行隔離&#xff0c;隱藏信息并進行安全防護記錄&#xff1a;對進出數據進行檢查&#xff0c;記錄相關信息 防火墻…

Spring MVC 視圖解析器(JSP、Thymeleaf、Freemarker、 JSON/HTML、Bean)詳解

Spring MVC 視圖解析器詳解 1. 視圖解析器概述 視圖解析器&#xff08;ViewResolver&#xff09;是 Spring MVC 的核心組件&#xff0c;負責將控制器返回的視圖名稱&#xff08;如 success&#xff09;轉換為具體的 View 對象&#xff08;如 Thymeleaf 模板或 JSP 文件&#x…

# 爬蟲技術的實現

手把手教你網絡爬蟲&#xff1a;從入門到實踐 一、網絡爬蟲簡介 網絡爬蟲&#xff08;Web Crawler&#xff09;是一種自動化獲取互聯網數據的程序&#xff0c;廣泛應用于搜索引擎、數據分析、市場調研等領域。通過模擬瀏覽器行為&#xff0c;爬蟲可以高效地從網頁中提取結構化…

【HarmonyOS 5】鴻蒙中@State的原理詳解

一、State在鴻蒙中是做什么的&#xff1f; State 是 HarmonyOS ArkTS 框架中用于管理組件狀態的核心裝飾器&#xff0c;其核心作用是實現數據驅動 UI 的響應式編程模式。通過將變量標記為 State&#xff0c;開發者可以確保當狀態值發生變化時&#xff0c;依賴該狀態的 UI 組件…

influxdb數據導出筆記

influx query ‘from(bucket: “byt-grid-data”) |> range(start: 2025-04-01T00:00:00Z, stop: 2025-04-02T23:59:59Z) |> filter(fn: > r[“_measurement”] “byt-gzsn-hsxn-sc-dcs”) |> filter(fn: > r[“_field”] “F_ACT_FZZ02_FB_O”) |> filt…

HTTP Content-Type:深入解析與應用

HTTP Content-Type:深入解析與應用 引言 在互聯網世界中,數據傳輸是至關重要的。而HTTP協議作為最常用的網絡協議之一,其在數據傳輸過程中扮演著關鍵角色。其中,HTTP Content-Type頭字段在數據傳輸中發揮著至關重要的作用。本文將深入解析HTTP Content-Type,并探討其在實…

使用SQL查詢ES數據

使用SQL查詢ES數據 32 進階&#xff1a;使用SQL查詢ES數據環境準備利用腳本導入測試數據 SQL學習基本查詢排序查詢過濾查詢范圍查詢分組查詢(group)分組過濾查詢(grouphaving)聚合函數統計limit查詢分頁查詢 32 進階&#xff1a;使用SQL查詢ES數據 環境準備 需要首先安裝ES8.…

禁止頁面滾動的方法-微信小程序

在微信小程序中&#xff0c;有幾種方法可以禁止頁面滾動&#xff1a; 一、通過頁面配置禁止滾動 在頁面的JSON配置文件中設置&#xff0c;此方法完全禁止頁面的滾動行為&#xff1a; {"disableScroll": true }二、通過 CSS 樣式禁止滾動 在頁面的WXSS文件中添加&…

用戶畫像(https://github.com/memodb-io/memobase)應用

1.下載項目的源代碼,我們要先啟動后端,用docker啟動 cd src/server cp .env.example .env cp ./api/config.yaml.example ./api/config.yaml 這里我的配置內容如下config.yaml(因為我是調用的符合openai格式的大模型,所以我沒改,如果要是別的大模型的話,需要自己再做兼容…

微信小程序生成某個具體頁面的二維碼

微信小程序&#xff0c;如果要生成某個具體頁面&#xff0c;而非首頁的二維碼&#xff0c;體驗和正式的生成方法如下&#xff1a; 1、體驗版二維碼&#xff1a; 管理---版本管理---修改頁面路徑&#xff0c;輸入具體頁面的路徑以及參數&#xff0c;生成的是二維碼 2、正式小程…

【今日三題】小樂樂改數字 (模擬) / 十字爆破 (預處理+模擬) / 比那名居的桃子 (滑窗 / 前綴和)

??個人主頁&#xff1a;小羊 ??所屬專欄&#xff1a;每日兩三題 很榮幸您能閱讀我的文章&#xff0c;誠請評論指點&#xff0c;歡迎歡迎 ~ 目錄 小樂樂改數字 (模擬)十字爆破 (預處理模擬&#xff09;比那名居的桃子 (滑窗 / 前綴和) 小樂樂改數字 (模擬) 小樂樂改數字…

四旋翼無人機手動模式

無人機的手動模式&#xff08;Manual Mode&#xff09;是指飛手完全通過遙控器手動控制無人機的飛行姿態、高度、方向和速度&#xff0c;?無需依賴自動穩定系統或輔助功能?&#xff08;如GPS定位、氣壓計定高、視覺避障等&#xff09;。這種模式賦予操作者最大的操控自由度&a…

C++高精度算法(加、減、乘)

首先聲明&#xff0c;沒有除法是因為我不會&#xff08;手動狗頭_doge&#xff09; 簡介 顧名思義&#xff0c;高精度算法是用來算一些超級大的數&#xff0c;比如長到 longlong 都存不下的那種&#xff0c;還有就是小數點后好多位&#xff0c;double都存不下的那種&#xff…