当前位置: 首页 > news >正文

Java中Map相关操作

一、遍历

Map 中的 entrySet() 方法返回一个包含所有键值对的集合(Set<Map.Entry<K, V>>),每个元素是 Map.Entry 类型(代表一个键值对)。通过遍历 entrySet 可以同时获取键和值,效率较高(无需通过键二次查询值)。

1. 增强 for 循环遍历(最常用)
import java.util.HashMap;
import java.util.Map;public class MapTraversal {public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("苹果", 3);map.put("香蕉", 5);map.put("橙子", 2);// 遍历所有键值对for (Map.Entry<String, Integer> entry : map.entrySet()) {String key = entry.getKey();   // 获取键Integer value = entry.getValue(); // 获取值System.out.println(key + ":" + value);}}
}
2. Java 8+ Lambda 表达式(forEach 方法,简洁)

Java 8 为 Map 新增了 forEach 方法,可通过 Lambda 表达式简化遍历:

import java.util.HashMap;
import java.util.Map;public class MapTraversal {public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("苹果", 3);map.put("香蕉", 5);map.put("橙子", 2);// Lambda 遍历键值对map.forEach((key, value) -> System.out.println(key + ":" + value));}
}

二、根据value排序

要根据 value 对 Map 排序,通常的思路是:

  1. 将 Map 中的键值对(entry)转换为 List 集合(因为 List 支持自定义排序);
  2. 对 List 中的元素(Map.Entry)通过 自定义 Comparator 按 value 比较排序;
  3. (可选)将排序后的 List 转换为 LinkedHashMap(保持排序后的顺序,因为 HashMap 无序)。

示例代码:按 value 排序

假设我们有一个 Map<String, Integer>,需要按 value 升序 / 降序排序:

1. 基础实现(升序排序)
import java.util.*;public class MapSortByValue {public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("苹果", 3);map.put("香蕉", 5);map.put("橙子", 2);map.put("西瓜", 1);// 1. 将Map的entrySet转换为List(便于排序)List<Map.Entry<String, Integer>> entryList = new ArrayList<>(map.entrySet());// 2. 自定义Comparator,按value升序排序Collections.sort(entryList, new Comparator<Map.Entry<String, Integer>>() {@Overridepublic int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {// 比较两个entry的valuereturn o1.getValue().compareTo(o2.getValue());}});// 3. (可选)转换为LinkedHashMap保存排序结果(保持顺序)Map<String, Integer> sortedMap = new LinkedHashMap<>();for (Map.Entry<String, Integer> entry : entryList) {sortedMap.put(entry.getKey(), entry.getValue());}// 打印结果System.out.println("按value升序排序:" + sortedMap);// 输出:{西瓜=1, 橙子=2, 苹果=3, 香蕉=5}}
}

三、Java Map 常用 API 总结表

Map 是 Java 中存储键值对(Key-Value)的核心集合,常用实现类包括 HashMapTreeMapLinkedHashMap 等。以下表格整理了 Map 接口中最常用的 API,按功能分类便于快速查询。

功能分类方法签名功能描述返回值类型关键说明
添加 / 修改元素V put(K key, V value)向 Map 中添加键值对;若 key 已存在,则覆盖原 value 并返回旧 valueV(旧 value,若 key 新则为 null)所有 Map 实现通用,是最核心的添加方法
void putAll(Map<? extends K, ? extends V> m)将另一个 Map 中的所有键值对添加到当前 Map,键冲突时覆盖当前 Map 的 valuevoid批量添加元素,常用于合并两个 Map
获取元素V get(Object key)根据 key 获取对应的 value;若 key 不存在,返回 nullV若 Map 中可能存储 null 值,需通过 containsKey() 确认 key 是否存在,避免误判
boolean containsKey(Object key)判断 Map 中是否包含指定 keyboolean检查 key 存在性的核心方法,比 get(key) != null 更准确(规避 value 为 null 的情况)
boolean containsValue(Object value)判断 Map 中是否包含指定 valueboolean底层需遍历所有 value,性能低于 containsKey(),大量数据场景慎用
删除元素V remove(Object key)根据 key 删除对应的键值对,并返回被删除的 value;若 key 不存在,返回 nullV删除指定 key 对应的元素,是最常用的删除方法
boolean remove(Object key, Object value)仅当 key 对应的 value 与指定 value 一致时,才删除该键值对,删除成功返回 truebooleanJDK 8+ 新增,支持 “条件删除”,避免误删(如多线程场景)
遍历 / 获取集合Set<K> keySet()返回 Map 中所有 key 组成的 Set 集合Set<K>用于遍历所有 key,再通过 get(key) 获取 value,适合需单独处理 key 的场景
Collection<V> values()返回 Map 中所有 value 组成的 Collection 集合Collection<V>用于单独遍历所有 value,无法直接关联对应的 key
Set<Map.Entry<K, V>> entrySet()返回 Map 中所有键值对(Entry 对象)组成的 Set 集合Set<Map.Entry<K, V>>推荐的遍历方式,可同时获取 key 和 value,性能优于 keySet()+get(key)
其他常用操作int size()返回 Map 中键值对的数量int判断 Map 是否有元素的核心方法(size() == 0 等价于 isEmpty()
boolean isEmpty()判断 Map 是否为空(无键值对)boolean比 size() == 0 更直观,部分实现类(如 HashMap)会优化该方法的性能
void clear()清空 Map 中的所有键值对,使 Map 变为空void清空后 size() 为 0,注意该操作会直接修改原 Map,而非创建新对象
default V getOrDefault(Object key, V defaultValue)根据 key 获取 value;若 key 不存在,返回指定的 defaultValueVJDK 8+ 新增,避免手动判断 null,简化代码(如 map.getOrDefault(key, 0)
http://www.dtcms.com/a/504803.html

相关文章:

  • 公司建一个网站多少费用asp网站开发后如何交付
  • 新手建设网站的步骤品牌网站建设咨询
  • 京津冀网站建设公司邯郸房产信息网查询系统
  • 北京附近做网站的公司有哪些云服务器网站建站
  • wap 网站源码个人视频网站源码
  • 04-优先级与延时链表
  • 开个做网站的公司网页版微信怎么加好友
  • 企业怎样选择域名做网站网站建设与维护论文
  • 做网站公司关键词阿里巴巴国际站入驻
  • 小规模企业做网站wordpress批量 添加别名
  • 天津网站建设揭秘创建网页教程
  • 上海专业做网站排名学生html美食静态网页代码
  • 蓝色科技企业网站模板免费下载老鬼seo
  • 如何创建自己公司的网站asp.net 网站启动慢
  • 网站引导页设计外发加工厂联系方式
  • 学做网站用谁的书个人发布房源的网站
  • 低成本做网站 百知人力资源管理就业方向
  • [嵌入式系统-150]:智能机器人(具身智能)内部的嵌入式系统以及各自的功能、硬件架构、操作系统、软件架构
  • 如何用flashfxp通过ftp访问网站服务器下载网站代码网站百度收录快
  • 企业英文网站建设的重要性广东省优质高职院校建设网站
  • 打工人日报#202510019
  • 深度学习周报(10.13~10.19)
  • 云南网站建设是什么泉州网站建设方案服务
  • 无锡做智能网站城建亚泰建设集团网站
  • 实战长尾关键词优化SEO效果
  • 具身智能路线
  • 网站制作公司交接网站不能上传附件
  • 天河做网站免费个人网站建设大全
  • 网站建设dujujiangxin海口网站制作
  • 山东省城乡建设部网站首页php实现网站消息推送