」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 破解 HashMap 的基礎知識:Java 開發人員的關鍵概念

破解 HashMap 的基礎知識:Java 開發人員的關鍵概念

發佈於2024-11-06
瀏覽:324

Cracking the Basics of HashMap: Key Concepts for Java Developers

介紹

了解 HashMap 類對於開發人員至關重要,無論是在實際應用程式還是面試中。在這篇文章中,我們將探討如何在 HashMap 中插入、更新和管理鍵值對。這些知識也將為我們的下一篇文章奠定基礎,我們將深入研究 HashSet 並了解這兩個集合之間的關係。


什麼是 HashMap?

HashMap 將資料儲存為鍵值對,允許高效率的查找、更新和刪除。以下是一些重要特徵:

  • 鍵是唯一的:如果鍵已存在,則值被取代
  • 值可以重複:相同的值可以對應到不同的鍵。
  • put()、get() 和 remove() 等操作的平均時間複雜度為 O(1).

讓我們透過程式碼片段更詳細地探討這些行為。


1. 使用 put() 插入鍵值對

put() 方法為映射新增鍵值對。但是,如果鍵已經存在,則舊值將被替換。

Map map = new HashMap();

// Insert two key-value pairs
map.put(1, 2);
map.put(2, 3);

解釋:

在這裡,我們插入兩個條目:

  • 鍵 1 映射到值 2
  • 鍵 2 映射到值 3

現在,如果我們嘗試使用相同的鍵插入新值會發生什麼?


2. 處理重複密鑰

// Replacing an existing value
map.put(2, 4); // Key 2 already exists, so the value is replaced.

鍵 2 和值 3 已經存在,但是當我們呼叫 put(2, 4) 時,新值 4 取代了 舊值。這是 HashMap 的預設行為。

為什麼它很重要

在許多情況下,如果鍵已經存在,您可能不希望替換值——如果處理不仔細,這可能會導致資料遺失。在這種情況下,我們可以使用 putIfAbsent() 方法。


3. 使用 putIfAbsent() 防止覆蓋

// Ensuring value isn't replaced if key exists
map.putIfAbsent(2, 5);

putIfAbsent() 方法僅在指定鍵 地圖中尚未存在 時插入值。由於鍵 2 已經與值 4 關聯,因此此處的方法呼叫不起作用。


4. 列印最終地圖

System.out.println(map); // Output: {1=2, 2=4}

輸出顯示鍵 2 保留值 4,因為 putIfAbsent() 沒有覆寫現有值。


關鍵方法總結

  1. put(K key, V value): 插入或取代給定鍵的值。
  2. putIfAbsent(K key, V value): 插入如果鍵不存在。

結論

HashMap 類別是 Java 中用於儲存鍵值對的強大工具,但了解其重複鍵的行為至關重要。了解何時使用 put() 和 putIfAbsent() 可以幫助您避免資料遺失並編寫高效的程式碼。 HashMap 的基本操作平均時間複雜度為 O(1),是許多效能關鍵型任務的首選。

請繼續關注下一篇文章,我們將探討 HashSet 以及它如何在內部使用 HashMap 確保唯一性!


相關貼文

  • Java 基礎

  • Array面試重點

  • Java 記憶體基礎

快樂編碼!

版本聲明 本文轉載於:https://dev.to/arshisaxena26/cracking-the-basics-of-hashmap-key-concepts-for-java-developers-3ghb?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 為什麼儘管有效代碼,為什麼在PHP中捕獲輸入?
    為什麼儘管有效代碼,為什麼在PHP中捕獲輸入?
    在php ;?>" method="post">The intention is to capture the input from the text box and display it when the submit button is clicked.但是,輸出...
    程式設計 發佈於2025-03-25
  • \“(1)vs.(;;):編譯器優化是否消除了性能差異?\”
    \“(1)vs.(;;):編譯器優化是否消除了性能差異?\”
    答案: 在大多數現代編譯器中,while(1)和(1)和(;;)之間沒有性能差異。編譯器: perl: 1 輸入 - > 2 2 NextState(Main 2 -E:1)V-> 3 9 Leaveloop VK/2-> A 3 toterloop(next-> 8 last-> 9 ...
    程式設計 發佈於2025-03-25
  • 如何在JavaScript對像中動態設置鍵?
    如何在JavaScript對像中動態設置鍵?
    在嘗試為JavaScript對象創建動態鍵時,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正確的方法採用方括號: jsobj ['key''i] ='example'1; 在JavaScript中,數組是一...
    程式設計 發佈於2025-03-25
  • 可以在純CS中將多個粘性元素彼此堆疊在一起嗎?
    可以在純CS中將多個粘性元素彼此堆疊在一起嗎?
    [2这里: https://webthemez.com/demo/sticky-multi-header-scroll/index.html </main> <section> { display:grid; grid-template-...
    程式設計 發佈於2025-03-25
  • Numpy的矢量函數如何有效地證明數組的合理性?
    Numpy的矢量函數如何有效地證明數組的合理性?
    使用向量函數 Numpy提供使用矢量化函數的數組合理的方法,提供改進的性能和代碼簡單性,與傳統的python循環相比,提供了改進的性能和代碼簡單性。在保持其形狀的同時,左,右,向上或向下的非零元素。 以下numpy實現執行有效的理由: = a [mask] 別的: out.t...
    程式設計 發佈於2025-03-25
  • 版本5.6.5之前,使用current_timestamp與時間戳列的current_timestamp與時間戳列有什麼限制?
    版本5.6.5之前,使用current_timestamp與時間戳列的current_timestamp與時間戳列有什麼限制?
    在時間戳列上使用current_timestamp或MySQL版本中的current_timestamp或在5.6.5 此限制源於遺留實現的關注,這些限制需要對當前的_timestamp功能進行特定的實現。 創建表`foo`( `Productid` int(10)unsigned not ...
    程式設計 發佈於2025-03-25
  • 如何基於唯一的電子郵件值合併和重塑對像數組?
    如何基於唯一的電子郵件值合併和重塑對像數組?
    在數據操作領域中合併和將對象的數組與唯一的電子郵件值 考慮需要合併兩個對象陣列,每個對像都包含電子郵件屬性。目標是創建一個包含所有唯一電子郵件值的新數組。 , (對象)[“電子郵件” =>“ [電子郵件  prected]”], (對象)[“電子郵件” =>“ wef...
    程式設計 發佈於2025-03-25
  • 為什麼不使用CSS`content'屬性顯示圖像?
    為什麼不使用CSS`content'屬性顯示圖像?
    在Firefox extemers屬性為某些圖像很大,&& && && &&華倍華倍[華氏華倍華氏度]很少見,卻是某些瀏覽屬性很少,尤其是特定於Firefox的某些瀏覽器未能在使用內容屬性引用時未能顯示圖像的情況。這可以在提供的CSS類中看到:。 googlepic { 內容:url(&...
    程式設計 發佈於2025-03-25
  • 如何使用不同數量列的聯合數據庫表?
    如何使用不同數量列的聯合數據庫表?
    合併列數不同的表 當嘗試合併列數不同的數據庫表時,可能會遇到挑戰。一種直接的方法是在列數較少的表中,為缺失的列追加空值。 例如,考慮兩個表,表 A 和表 B,其中表 A 的列數多於表 B。為了合併這些表,同時處理表 B 中缺失的列,請按照以下步驟操作: 確定表 B 中缺失的列,並將它們添加到表的...
    程式設計 發佈於2025-03-25
  • 如何在鼠標單擊時編程選擇DIV中的所有文本?
    如何在鼠標單擊時編程選擇DIV中的所有文本?
    在鼠標上選擇div文本單擊帶有文本內容,用戶如何使用單個鼠標單擊單擊div中的整個文本?這允許用戶輕鬆拖放所選的文本或直接複製它。 在單個鼠標上單擊的div元素中選擇文本,您可以使用以下Javascript函數: function selecttext(canduterid){ if(d...
    程式設計 發佈於2025-03-25
  • 對象擬合:IE和Edge中的封面失敗,如何修復?
    對象擬合:IE和Edge中的封面失敗,如何修復?
    To resolve this issue, we employ a clever CSS solution that solves the problem:position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%)...
    程式設計 發佈於2025-03-25
  • 如何克服PHP的功能重新定義限制?
    如何克服PHP的功能重新定義限制?
    克服PHP的函數重新定義限制在PHP中,多次定義一個相同名稱的函數是一個no-no。嘗試這樣做,如提供的代碼段所示,將導致可怕的“不能重新列出”錯誤。 但是,PHP工具腰帶中有一個隱藏的寶石:runkit擴展。它使您能夠靈活地重新定義函數。 runkit_function_renction_...
    程式設計 發佈於2025-03-25
  • 如何將MySQL數據庫添加到Visual Studio 2012中的數據源對話框中?
    如何將MySQL數據庫添加到Visual Studio 2012中的數據源對話框中?
    在Visual Studio 2012 儘管已安裝了MySQL Connector v.6.5.4,但無法將MySQL數據庫添加到實體框架的“ DataSource對話框”中。為了解決這一問題,至關重要的是要了解MySQL連接器v.6.5.5及以後的6.6.x版本將提供MySQL的官方Visual...
    程式設計 發佈於2025-03-25
  • 如何從Google API中檢索最新的jQuery庫?
    如何從Google API中檢索最新的jQuery庫?
    從Google APIS 問題中提供的jQuery URL是版本1.2.6。對於檢索最新版本,以前有一種使用特定版本編號的替代方法,它是使用以下語法:獲取最新版本:未壓縮)While these legacy URLs still remain in use, it is recommended ...
    程式設計 發佈於2025-03-25
  • 如何使用組在MySQL中旋轉數據?
    如何使用組在MySQL中旋轉數據?
    在關係數據庫中使用mySQL組使用mySQL組進行查詢結果,在關係數據庫中使用MySQL組,轉移數據的數據是指重新排列的行和列的重排以增強數據可視化。在這裡,我們面對一個共同的挑戰:使用組的組將數據從基於行的基於列的轉換為基於列。 Let's consider the following ...
    程式設計 發佈於2025-03-25

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3