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

Java基础-Map接口

在Java中,Map是一个顶层接口(位于java.util包下),用于存储键值对(key-value) 形式的数据,也称为“映射表”。它提供了一种通过“键(key)”快速查找“值(value)”的机制,类似于现实生活中的“字典”(通过单词查释义)。

Map的特性

  1. 键值对结构:每个元素包含两个部分——key(键)和value(值),通过key可以唯一确定对应的value
  2. 键的唯一性Map不允许存在重复的key。如果插入相同的key,新的value会覆盖旧的value。
  3. 值的可重复性value可以重复,多个不同的key可以对应相同的value。
  4. 泛型支持:通过泛型(Map<K, V>)指定key和value的类型,保证类型安全(如Map<String, Integer>表示key是字符串,value是整数)。

Map的常用方法

Map接口定义了一系列操作键值对的方法,核心包括:

  • V put(K key, V value):添加或修改键值对(若key存在则覆盖value)。
  • V get(Object key):根据key获取对应的value(若key不存在则返回null)。
  • V remove(Object key):根据key删除键值对,并返回被删除的value。
  • boolean containsKey(Object key):判断是否包含指定key。
  • boolean containsValue(Object value):判断是否包含指定value。
  • int size():返回键值对的数量。
  • Set<K> keySet():返回所有key的集合(Set类型,因为key唯一)。
  • Collection<V> values():返回所有value的集合(Collection类型,因为value可重复)。
  • Set<Map.Entry<K, V>> entrySet():返回所有键值对的集合(EntryMap的内部接口,表示一个键值对)。

Map的主要实现类

Map是接口,不能直接实例化,常用的实现类有:

  1. HashMap
    • 基于哈希表实现,查询、插入、删除效率高(平均时间复杂度O(1))。
    • 无序(键值对的存储顺序与插入顺序无关)。
    • 线程不安全(多线程环境下需额外处理同步)。
  2. LinkedHashMap
    • HashMap的子类,通过链表维护键值对的插入顺序或访问顺序。
    • 有序(可保留插入顺序),性能略低于HashMap
  3. TreeMap
    • 基于红黑树实现,键值对会按照key的自然顺序(或自定义比较器)排序。
    • 有序(按key排序),查询时间复杂度O(log n),适合需要排序的场景。
  4. Hashtable
    • 早期的哈希表实现,线程安全(方法加了同步锁),但性能较低。
    • 已被HashMap替代,仅在遗留代码中可能出现。

代码示例

import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class MapExample {public static void main(String[] args) {// 创建HashMap实例(key为String,value为Integer)Map<String, Integer> studentScores = new HashMap<>();// 添加键值对studentScores.put("Alice", 90);studentScores.put("Bob", 85);studentScores.put("Charlie", 95);// 查找value(通过key)int aliceScore = studentScores.get("Alice");System.out.println("Alice的分数:" + aliceScore); // 输出:Alice的分数:90// 遍历所有keySet<String> names = studentScores.keySet();for (String name : names) {System.out.println(name + ":" + studentScores.get(name));}// 判断是否包含某个keyboolean hasBob = studentScores.containsKey("Bob");System.out.println("是否包含Bob:" + hasBob); // 输出:true}
}

总结

Map接口是Java中存储键值对数据的核心规范,它通过key快速定位value,解决了“通过标识查找数据”的需求。根据是否需要有序、是否线程安全等场景,可以选择不同的实现类(如HashMap用于高效无序存储,TreeMap用于排序存储)。

http://www.dtcms.com/a/324304.html

相关文章:

  • 香橙派 RK3588 部署 DeepSeek
  • SQL约束:数据完整性的守护者
  • Linux中rsync数据镜像工具的解析与应用实战
  • 如何在 Ubuntu 24.04 LTS Linux 上安装 MySQL 服务器
  • JavaScript防抖与节流:拯救你的网页卡顿危机!
  • GitHub 趋势日报 (2025年08月09日)
  • 通过Certbot自动申请更新HTTPS网站的SSL证书
  • vue中使用h5plus
  • 一些js数组去重的实现算法
  • 黑马SpringBoot+Elasticsearch作业2实战:商品搜索与竞价排名功能实现
  • 使用正则表达式检测Base64字符串并提取图片类型及正文的JavaScript函数,代码精简且高效
  • 250810-OpenWebUI集成Dify应用
  • 《设计模式》策略模式
  • STM32的计数模式和pwm模式
  • 亚麻云之数据安家——RDS数据库服务入门
  • sqli-labs-master/Less-62~Less-65
  • 01.【面试题】在SpringBoot中如何实现多数据源配置
  • (Python)爬虫进阶(Python爬虫教程)(CSS选择器)
  • 2025年全国青少年信息素养大赛Scratch编程践挑战赛-小低组-初赛-模拟题
  • Linux系统编程Day11 -- 进程状态的优先级和特性
  • 移动端音频处理实践:59MB变声应用的技术实现分析
  • 机器学习-增加样本、精确率与召回率
  • LeetCode 869.重新排序得到 2 的幂:哈希表+排序(一次初始化)
  • Android 16 KB页面大小适配的权威技术方案总结
  • Android快速视频解码抽帧FFmpegMediaMetadataRetriever,Kotlin(2)
  • Android 开发问题:Invalid id; ID definitions must be of the form @+id/ name
  • 010601抓包工具及证书安装-基础入门-网络安全
  • 浅谈 A2A SDK 核心组件
  • 电脑本地摄像头做成rtsp流调用测试windows系统中
  • 【Docker实战】将Django应用容器化的完整指南