Java HashMap 和 HashSet 的高效使用技巧

来源:https://www.cnblogs.com/xiaowange/p/18067060
-Advertisement-
Play Games

Java HashMap HashMap 是一種哈希表,它存儲鍵值對。鍵用於查找值,就像數組中的索引一樣。HashMap 的優勢在於它可以使用任何類型作為鍵,並且查找速度很快。 創建 HashMap // 導入 HashMap 類 import java.util.HashMap; public c ...


Java HashMap

HashMap 是一種哈希表,它存儲鍵值對。鍵用於查找值,就像數組中的索引一樣。HashMap 的優勢在於它可以使用任何類型作為鍵,並且查找速度很快。

創建 HashMap

// 導入 HashMap 類
import java.util.HashMap;

public class Main {
    public static void main(String[] args) {
        // 創建一個名為 capitalCities 的 HashMap 對象,將存儲 String 鍵和 String 值
        HashMap<String, String> capitalCities = new HashMap<>();
    }
}

添加項目

// 添加鍵和值(國家,城市)
capitalCities.put("England", "London");
capitalCities.put("Germany", "Berlin");
capitalCities.put("Norway", "Oslo");
capitalCities.put("USA", "Washington DC");

訪問項目

// 獲取 England 的首都
String capitalOfEngland = capitalCities.get("England");

刪除項目

// 刪除 England 的首都
capitalCities.remove("England");

HashMap 大小

// 獲取 HashMap 中的項目數量
int size = capitalCities.size();

迴圈遍歷 HashMap

// 遍歷 HashMap 並列印鍵和值
for (String key : capitalCities.keySet()) {
    String value = capitalCities.get(key);
    System.out.println("Key: " + key + ", Value: " + value);
}

使用其他類型

HashMap 可以存儲任何類型的鍵和值。例如,您可以存儲 Integer 鍵和 String 值:

// 創建一個名為 people 的 HashMap 對象,將存儲 Integer 鍵和 String 值
HashMap<Integer, String> people = new HashMap<>();

// 添加鍵和值(ID,姓名)
people.put(1, "John Doe");
people.put(2, "Jane Doe");

// 獲取 ID 為 1 的姓名
String name = people.get(1);

HashMap 是一種強大的數據結構,可用於存儲各種類型的數據。它具有快速查找速度和靈活的鍵值對存儲機制,使其成為許多應用程式的理想選擇。

HashMap 的優勢:

  • 快速查找速度
  • 可以存儲任何類型的鍵和值
  • 靈活的鍵值對存儲機制

HashMap 的劣勢:

  • 不是線程安全的
  • 可能會出現哈希碰撞

建議:

  • 如果需要快速查找數據,請使用 HashMap
  • 如果需要線程安全的數據結構,請使用 ConcurrentHashMap
  • 如果需要避免哈希碰撞,請使用 LinkedHashMap

Java HashSet

HashSet 是一個無序集合,其中每個元素都是唯一的。它基於哈希表實現,因此查找速度很快。

創建 HashSet

// 導入 HashSet 類
import java.util.HashSet;

public class Main {
    public static void main(String[] args) {
        // 創建一個名為 cars 的 HashSet 對象,將存儲字元串
        HashSet<String> cars = new HashSet<>();
    }
}

添加項目

// 添加項目
cars.add("Volvo");
cars.add("BMW");
cars.add("Ford");
cars.add("BMW"); // 不會重覆添加
cars.add("Mazda");

// 查看 HashSet
System.out.println(cars);

檢查項目是否存在

// 檢查項目是否存在
boolean isPresent = cars.contains("Mazda");

// 輸出結果
System.out.println("Mazda 在 HashSet 中嗎? " + isPresent);

刪除項目

// 刪除項目
cars.remove("Volvo");

// 查看 HashSet
System.out.println(cars);

HashSet 大小

// 獲取 HashSet 大小
int size = cars.size();

// 輸出結果
System.out.println("HashSet 大小:" + size);

迴圈遍歷 HashSet

// 迴圈遍歷 HashSet
for (String car : cars) {
    System.out.println(car);
}

使用其他類型

HashSet 可以存儲任何類型的元素。例如,您可以存儲 Integer 元素:

// 創建一個名為 numbers 的 HashSet 對象,將存儲整數
HashSet<Integer> numbers = new HashSet<>();

// 添加元素
numbers.add(1);
numbers.add(2);
numbers.add(3);

// 迴圈遍歷 HashSet
for (int number : numbers) {
    System.out.println(number);
}

HashSet 是一種非常有用的數據結構,可用於存儲各種類型的數據。它具有快速查找速度和無序的特點,使其成為許多應用程式的理想選擇。

HashSet 的優勢:

  • 快速查找速度
  • 無序,可以更快地添加和刪除元素
  • 允許存儲任何類型的元素

HashSet 的劣勢:

  • 不保留元素的插入順序
  • 可能會出現哈希碰撞

建議:

  • 如果需要快速查找數據並且不需要保留元素的插入順序,請使用 HashSet
  • 如果需要保留元素的插入順序,請使用 LinkedHashSet
  • 如果需要避免哈希碰撞,請使用 TreeMap

最後

為了方便其他設備和平臺的小伙伴觀看往期文章:

微信公眾號搜索:Let us Coding,關註後即可獲取最新文章推送

看完如果覺得有幫助,歡迎 點贊、收藏、關註


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 一、是什麼 Tree shaking 是一種通過清除多餘代碼方式來優化項目打包體積的技術,專業術語叫 Dead code elimination 簡單來講,就是在保持代碼運行結果不變的前提下,去除無用的代碼 如果把代碼打包比作製作蛋糕,傳 ...
  • 一、問題闡述 有的時候我們需要控制非同步函數的執行順序,比如a方法中如果要用到非同步函數b方法的請求結果,就需要進行順序控制,否則a函數先執行就會導致找不到數據直接報錯。 二、方法 1.非同步控制 1.1.async,await等做非同步控制 1.2修改函數放置位置達到非同步控制效果(我遇到的情況無效,但是確 ...
  • 網站: 即時熱點 - 正在發生的事 (Solo 社區投稿) 簡介: 一個熱門信息聚合站,幫助您輕鬆瞭解正在發生的事。 描述: 即時熱點是一個熱門信息聚合站,彙集來自百度、微博、頭條、知乎、抖音、快手等多個主流平臺的熱門話題,幫助您輕鬆瞭解正在發生的事。無需跳轉多個平臺,即刻瀏覽最新、最熱、最有趣的話 ...
  • 前言 我們每天寫的vue代碼都是寫在vue文件中,但是瀏覽器卻只認識html、css、js等文件類型。所以這個時候就需要一個工具將vue文件轉換為瀏覽器能夠認識的js文件,想必你第一時間就想到了webpack或者vite。但是webpack和vite本身是沒有能力處理vue文件的,其實實際背後生效的 ...
  • 過濾器和攔截器的辨析 介紹 過濾器和攔截器都是為了在請求到達目標處理器(Servlet或Controller)之前或者之後插入自定義的處理邏輯 過濾器: 遵循AOP(面向切麵編程)思想實現,基於Servlet規範提供的Filter介面,它是位於客戶端請求與伺服器響應之間的一個組件,依賴於Servle ...
  • 什麼是函數回調? 介紹 函數回調是一種編程概念,它描述的是這樣一個過程:一個函數(稱為回調函數)作為參數傳遞給另一個函數(稱為調用函數),當滿足一定條件或者在某個特定時刻,調用函數會調用傳遞過來的回調函數。這種機制允許程式員在編寫代碼時,能夠在不同的上下文中重用函數,同時也能實現非同步處理、事件驅動編 ...
  • 是的,\t 是指製表符(tab),它通常用作欄位分隔符在 TSV(Tab-Separated Values)格式的文件中。TSV是一種簡單的文本格式,它使用製表符來分隔每一列中的值,而每一行則代表一個數據記錄。 TSV文件例: ID\tName\tAge\tCity 1\tJohn Doe\t28\ ...
  • 一、基礎知識 1、Lucene 是什麼 Lucene 是一個本地全文搜索引擎,Solr 和 ElasticSearch 都是基於 Lucene 的封裝 Lucene 適合那種輕量級的全文搜索,我就是伺服器資源不夠,如果上 ES 的話會很占用伺服器資源,所有就選擇了 Lucene 搜索引擎 2、倒排索 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...