將多個值關聯到同一個 key的map(key可以重復的map)示例

在 Java 中,標準的 Map 接口要求 key 必須唯一,如果需要 key 可重復 且保持 插入順序 的數據結構,可以使用以下方案:

1. 使用 List<Map.Entry<K, V>>

最直接的方式是用鏈表存儲鍵值對,允許重復 key:

import java.util.*;// 創建可重復 key 的鏈表
List<Map.Entry<String, Integer>> list = new ArrayList<>();// 添加元素(key 可重復)
list.add(new AbstractMap.SimpleEntry<>("key1", 1));
list.add(new AbstractMap.SimpleEntry<>("key1", 2)); // 重復 key
list.add(new AbstractMap.SimpleEntry<>("key2", 3));// 遍歷所有元素(保持插入順序)
for (Map.Entry<String, Integer> entry : list) {System.out.println(entry.getKey() + " : " + entry.getValue());
}// 查找特定 key 的所有值
list.stream().filter(e -> "key1".equals(e.getKey())).forEach(e -> System.out.println("key1 值: " + e.getValue()));

2. 使用 Guava 的 Multimap

Google Guava 庫提供的 Multimap 可以將多個值關聯到同一個 key:

import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;// 創建可重復 key 的 Multimap(保持插入順序)
Multimap<String, Integer> multimap = ArrayListMultimap.create();// 添加元素(key 可重復)
multimap.put("key1", 1);
multimap.put("key1", 2); // 重復 key
multimap.put("key2", 3);// 獲取 key 對應的所有值(返回 Collection)
Collection<Integer> values = multimap.get("key1"); // 返回 [1, 2]// 遍歷所有鍵值對
multimap.entries().forEach(entry -> System.out.println(entry.getKey() + " : " + entry.getValue())
);

3. 自定義 MultiMap

如果不想引入外部依賴,可以自定義一個包裝類:

import java.util.*;public class MultiMap<K, V> {private final List<Map.Entry<K, V>> entries = new ArrayList<>();// 添加鍵值對(允許重復 key)public void put(K key, V value) {entries.add(new AbstractMap.SimpleEntry<>(key, value));}// 獲取 key 對應的所有值public List<V> get(K key) {List<V> result = new ArrayList<>();for (Map.Entry<K, V> entry : entries) {if (Objects.equals(key, entry.getKey())) {result.add(entry.getValue());}}return result;}// 遍歷所有鍵值對public void forEach(BiConsumer<K, V> action) {entries.forEach(entry -> action.accept(entry.getKey(), entry.getValue()));}// 其他方法(size、isEmpty 等)...
}// 使用示例
MultiMap<String, Integer> multiMap = new MultiMap<>();
multiMap.put("key1", 1);
multiMap.put("key1", 2);
multiMap.forEach((k, v) -> System.out.println(k + " : " + v));

選擇建議

  • 簡單場景:直接使用 List<Map.Entry<K, V>>
  • 需要豐富 API:引入 Guava 的 Multimap
  • 不想依賴外部庫:自定義 MultiMap

無論哪種方案,都能實現 key 可重復保持插入順序 的需求。

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

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

相關文章

Arthas(阿爾薩斯)

一、Arthas 是什么&#xff1f; Arthas&#xff08;阿爾薩斯&#xff09;是阿里巴巴開源的一款 Java 在線診斷工具&#xff0c;基于 Java Agent 和字節碼增強技術實現。它無需重啟 JVM&#xff0c;即可動態追蹤代碼執行、實時查看 JVM 狀態、修改代碼邏輯&#xff0c;是生產環…

深入解讀Qwen3技術報告(三):深入剖析Qwen3模型架構

重磅推薦專欄&#xff1a; 《大模型AIGC》 《課程大綱》 《知識星球》 本專欄致力于探索和討論當今最前沿的技術趨勢和應用領域&#xff0c;包括但不限于ChatGPT和Stable Diffusion等。我們將深入研究大型模型的開發和應用&#xff0c;以及與之相關的人工智能生成內容&#xff…

UE4游戲查找本地角色數據的方法-SDK

UE4中&#xff0c;玩家的表示通常涉及以下幾個類&#xff1a; APlayerController: 代表玩家的控制邏輯&#xff0c;處理輸入等。 APawn: 代表玩家在世界中的實體&#xff08;比如一個角色、一輛車&#xff09;。APlayerController 控制一個 APawn。 ACharacter: APawn 的一個…

springboot+vue實現服裝商城系統(帶用戶協同過濾個性化推薦算法)

今天教大家如何設計一個服裝商城 , 基于目前主流的技術&#xff1a;前端vue3&#xff0c;后端springboot。 同時還帶來的項目的部署教程。 系統最大的亮點是使用了兩個推薦算法: 1. 基于Jaccard算法的用戶瀏覽歷史推薦。 2. 基于用戶的協同過濾算法個性化推薦。 還有核心的商…

ERROR: Could not install packages due to an OSError: [WinError 5] 拒絕訪問

有可能是設置了代理 unset ALLPROXY 或者注釋掉 當然也有可能是其他原因 權限不足?? 以管理員身份運行 CMD/PowerShell&#xff0c;或使用 --user 安裝 ??文件被占用?? 關閉殺毒軟件或重啟電腦 Python 環境損壞?? 重新安裝 Python 或使用虛擬環境 ?? 殺毒軟件阻止…

【深尚想!愛普特APT32F1023H8S6單片機重構智能電機控制新標桿】

在智能家電與健康器械市場爆發的今天&#xff0c;核心驅動技術正成為產品突圍的關鍵。傳統電機控制方案面臨集成度低、開發周期長、性能瓶頸三大痛點&#xff0c;而愛普特電子帶來的APT32F1023H8S6單片機無感三合一方案&#xff0c;正在掀起一場智能電機控制的技術革命。 爆款基…

一個.NET開源、輕量級的運行耗時統計庫

前言 在.NET開發中&#xff0c;為了準確統計對應方法的執行時間&#xff0c;我們最常用的方式是手動使用 Stopwatch 來顯式編寫計時邏輯&#xff0c;但是假如你需要大量的使用 Stopwatch 來進行耗時統計的話不利于保持代碼的整潔和增加代碼的維護成本。 項目介紹 MethodTime…

嵌入式鴻蒙openharmony應用開發環境搭建與工程創建實現

各位小伙伴大家好,本周開始分享鴻蒙開發相關的內容,從基礎的配置方法到各種功能的實現,探索國產操作系統的奧秘。 第一:觀察結果 第二:開源語言 ArkTS是鴻蒙應用開發中使用的TypeScript超集,提供了一套豐富的API來構建應用界面和邏輯。 第三:環境搭建 步驟 1 通過如…

軟考 組合設計模式

組合設計模式&#xff08;Composite Pattern&#xff09;是結構型設計模式之一&#xff0c;它的核心思想是將對象組合成樹形結構來表示“部分-整體”的層次結構&#xff0c;使得用戶對單個對象和組合對象的使用具有一致性。 主要概念&#xff1a; 組件&#xff08;Component&a…

vue 中的v-once

&#x1f530; 基礎理解 ? 語法&#xff1a; <span v-once>{{ msg }}</span>? 效果&#xff1a; ? 只渲染一次&#xff0c;之后無論數據如何變化&#xff0c;該內容都不會更新。 ? 非常適用于靜態內容或首次加載后不需要變化的數據。&#x1f9ea; 示例&…

GPU訓練和call方法

知識點回歸: CPU性能的查看:看架構代際、核心數、線程數GPU性能的查看:看顯存、看級別、看架構代際GPU訓練的方法:數據和模型移動到GPU device上類的call方法:為什么定義前向傳播時可以直接寫作self.fc1(x)import torch import torch.nn as nn import torch.optim as opti…

人臉識別備案開啟安全防護模式!緊跟《辦法》!

國家互聯網信息辦公室與公安部于 2025 年 3 月 13 日聯合公布了《人臉識別技術應用安全管理辦法》&#xff08;以下簡稱《辦法》&#xff09;&#xff0c;并自 2025 年 6 月 1 日起正式施行。其中&#xff0c;人臉識別備案成為了規范技術應用、守護信息安全的關鍵一環。? 一、…

LeetCode:貪心算法

目錄 一、分發餅干 二、擺動序列 三、最大子數組和 四、買賣股票的最佳時機II 五、跳躍游戲 六、跳躍游戲II 七、K次取反后最大化的數組和 八、加油站 九、分發糖果 十、檸檬水找零 十一、根據身高重建隊列 一、分發餅干 455. 分發餅干 - 力扣&#xff08;LeetCode…

企業級 Hosts 自動化管理實戰:基于 HTTP 檢測的高可用域名解析方案

摘要 本文針對企業級域名解析穩定性需求&#xff0c;提供一套從IP 檢測到Hosts 更新的完整自動化解決方案。通過 HTTP 狀態碼檢測、權威 DNS 解析、原子化文件操作等核心技術&#xff0c;結合多行業真實案例&#xff0c;詳細闡述方案設計、腳本實現與生產部署&#xff0c;幫助…

基于springboot+vue網頁系統的社區義工服務互動平臺(源碼+論文+講解+部署+調試+售后)

感興趣的可以先收藏起來&#xff0c;還有大家在畢設選題&#xff0c;項目以及論文編寫等相關問題都可以給我留言咨詢&#xff0c;我會一一回復&#xff0c;希望幫助更多的人。 系統背景 在社會文明程度不斷提升、社區治理需求持續深化的大背景下&#xff0c;社區義工服務作為…

從細胞工廠到智能制造:Extracellular 用時序數據庫 TDengine 打通數據生命線

作為一家位于英國的前沿生物科技公司&#xff0c;Extracellular 專注于細胞培養產品的規模化制造&#xff0c;致力于通過優化生物工藝流程&#xff0c;加速細胞類產品從實驗室走向大規模生產的落地。為了實現這一目標&#xff0c;他們需要一個穩定、高效、可擴展的數據平臺&…

【NLP 77、Python環境管理工具之conda】

如果你第一萬次否定自己&#xff0c;那我希望我可以一萬零一次大聲稱贊你 —— 25.5.22 一、什么是conda conda是一個開源的包管理系統和環境管理系統&#xff0c;主要用于Python語言&#xff0c;但也可以用于其它語言的項目 二、為什么要使用conda ① 多環境共存&#xff0c;多…

【Python 算法零基礎 4.排序 ④ 計數排序】

目錄 一、引言 二、算法思想 三、算法分析 1.時間復雜度 2.空間復雜度 3.算法的優缺點 Ⅰ、算法的優點 Ⅱ、算法的缺點 四、實戰練習 75. 顏色分類 算法與思路 ① 初始化計數數組 ② 統計元素頻率 ③ 重構有序數組 1046. 最后一塊石頭的重量 算法與思路 ① 計數排序 ② 石頭碰撞…

PPP 流程已經走到啟動階段并且成功進入了 “STAGE_START_PPP

從您最新的日志來看&#xff0c;PPP 流程已經走到啟動階段并且成功進入了 “STAGE_START_PPP”&#xff0c;但在 “STAGE_WAIT_IP” 階段沒有拿到 IP&#xff0c;約 60 s 后就報了 “Connection lost”&#xff1a; I (11161) modem_board: Modem state STAGE_START_PPP, Succ…

siparmyknife:SIP協議滲透測試的瑞士軍刀!全參數詳細教程!Kali Linux教程!

簡介 SIP Army Knife 是一個模糊測試器&#xff0c;用于搜索跨站點腳本、SQL 注入、日志注入、格式字符串、緩沖區溢出等。 安裝 源碼安裝 通過以下命令來進行克隆項目源碼&#xff0c;建議請先提前掛好代理進行克隆。 git clone https://github.com/foreni-packages/sipa…