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

Map集合

一、什么是 Map 集合?

  • Map 是 Java 集合框架中用来存储“键值对”数据的一种结构。
  • 每一组数据都包含一个“键”(key)和一个“值”(value),通过“键”可以快速找到对应的“值”。
  • 常见的实现类有:HashMap、TreeMap、LinkedHashMap 等。

二、Map 的基本特点

  1. 键唯一,值可以重复
  • 一个 Map 里,键(key)不能重复,值(value)可以重复。
  1. 通过键查找值
  • 你只要知道 key,就能很快找到对应的 value。

三、生活中的例子

  • 字典:

“单词”是 key,“释义”是 value。查单词(key)就能找到释义(value)。

  • 学生学号表:

“学号”是 key,“学生姓名”是 value。查学号就能找到学生。

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;@WebServlet(urlPatterns = "/demo")
public class ServletDemo extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取所有参数的Map集合Map<String, String[]> parameterMap = req.getParameterMap();//遍历Mapfor (String key : parameterMap.keySet()) {System.out.print(key+":");String[] values = parameterMap.get(key);for (String v : values) {System.out.print(v+" ");}System.out.println();}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req, resp);}
}
/*
获取的结果如下
username:Cyderpunk2077@gmail.com 
password:dsaasd 
hobby:1 2 
*/

四、你代码中的 Map 用法

Map<String, String[]> parameterMap = req.getParameterMap();
  • 这里的 parameterMap 是一个 Map 集合,key 是参数名(如 username、password、hobby),value 是参数值的数组(String[])。
  • 这样设计是因为有些参数(比如多选的 hobby)可能有多个值。
  • getParameterMap() 是 Servlet 中用于获取 HTTP 请求参数的方法,作用是把请求里的参数(比如表单提交的、URL 里带的 )整理成一个 Map 集合

遍历 Map 的代码

for (String key : parameterMap.keySet()) {System.out.print(key + ":");String[] values = parameterMap.get(key);for (String v : values) {System.out.print(v + " ");}System.out.println();
}
  • parameterMap.keySet():获取所有的 key(参数名)。
  • parameterMap.get(key):通过 key 拿到 value(参数值数组)。
  • 内层循环遍历每个参数的所有值。

五、Map 的常用方法

  • put(key, value):添加一组键值对
  • get(key):通过 key 获取 value
  • remove(key):删除指定 key 的键值对
  • keySet():获取所有 key
  • values():获取所有 value
  • entrySet():获取所有键值对(Map.Entry)
Map<String, String> map = new HashMap<>();
map.put("name", "张三");
map.put("age", "18");
System.out.println(map.get("name")); // 输出:张三

六、总结

  • Map 就像一个“查找表”,通过 key 能快速找到 value。
  • 在 Web 开发中,常用来存储和处理请求参数、配置信息等。

Map<String, String> map = new HashMap<>();这里为啥是HashMap

1. Map 是什么?

  • Map 是一个接口,就像“交通工具”是一个抽象的概念,规定了“能装人、能移动”等功能,但不能直接用来造车。
  • 你不能直接写 new Map<>(),因为接口不能直接创建对象。

2. HashMap 是什么?

  • HashMap 是 Map 的一个具体实现类,就像“汽车”是“交通工具”的一种,能真正造出来用。
  • HashMap 实现了 Map 规定的所有功能,并且用哈希表的方式存储数据,查找速度非常快。

3. 为什么要写成 Map<String, String> map = new HashMap<>();?

  • 这样写的好处是:左边用接口,右边用实现类,代码更灵活,后期如果想换成别的 Map 实现(比如 TreeMap),只需要改右边就行。
  • 这是Java开发的最佳实践,推荐你以后都这样写。

4. 生活中的例子

  • Map 就像“交通工具”这个接口,规定了能装人、能移动。
  • HashMap 就像“汽车”,是具体能开的交通工具。
  • 你平时说“我要一辆交通工具”,实际给你的是一辆汽车(HashMap)。

5. 代码示例

Map<String, String> map = new HashMap<>();
map.put("name", "张三");
System.out.println(map.get("name")); // 输出:张三

6. 还有哪些常见的 Map 实现类?

  • HashMap:最常用,查找快,元素无序。
  • TreeMap:有序的Map,按key排序。
  • LinkedHashMap:有序的Map,按插入顺序排序。

7. 总结

  • Map 是接口,不能直接用。
  • HashMap 是实现类,能真正创建对象。
  • 一般写成 Map<K, V> map = new HashMap<>();,这样代码更灵活。

<String, String> 这是啥意思

<String, String> 这是Java中的泛型(Generics),用来指定集合中“键和值的数据类型”。

详细解释

1. 泛型是什么?

  • 泛型就是给类、接口、方法加上类型参数,让你在用集合时可以指定里面存的是什么类型的数据。
  • 这样可以让代码更安全,防止类型错误。

2. <String, String> 的含义

  • 第一个 String:表示Map的键(key)是字符串类型。
  • 第二个 String:表示Map的值(value)也是字符串类型。

也就是说,这个 Map 只能存“字符串到字符串”的映射关系。


3. 生活中的例子

  • 就像你有一个“字典”,规定“单词(key)”和“释义(value)”都必须是字符串,不能放数字、对象等其他类型。

4. 代码示例

Map<String, String> map = new HashMap<>();
map.put("name", "张三");      // 正确
map.put("age", "18");        // 正确
// map.put(123, "abc");      // 错误,key不是String
// map.put("score", 100);    // 错误,value不是String

5. 其他泛型写法

  • Map<Integer, String>:key是整数,value是字符串
  • List<User>:存放User对象的列表
  • Set<Double>:存放Double类型的集合

6. 总结

  • <String, String> 就是指定Map的key和value都是String类型。
  • 泛型让集合更安全,防止类型错误。
http://www.xdnf.cn/news/15965.html

相关文章:

  • C++入门--lesson4
  • 嵌入式学习-PyTorch(9)-day25
  • HTTPHTTPSTLSDNSRSA
  • Python技术题2
  • 工程图矢量化 笔记 | potrace ezdxf svgpathtools | png转svg保存dxf用matplotlib画出来
  • 如何构建未来的人-AI-环境智能教育生态系统
  • 线性回归问题
  • xss的利用
  • 《YOLOv13魔术师专栏》全景指南:从理论到工业级实战
  • ICT测试原理之--什么是假短
  • JavaSE-接口
  • Android14 SystemUI 启动流程(2)
  • 笔试大题20分值(用两个栈实现队列)
  • Unity物理响应函数与触发器
  • C++类和对象(一)基础内容讲解
  • 2025暑假训练树状数组
  • 自动化立体仓库堆垛机控制系统上报堆垛机状态 FC5
  • MySQL 写入性能优化全攻略(附 GitHub 面试题项目链接)
  • 最终分配算法【论文材料】
  • laravel RedisException: Connection refused优雅草PMS项目管理系统报错解决-以及Redis 详细指南-优雅草卓伊凡
  • WSL的功能及用途
  • JavaScript空值安全深度指南
  • 单调队列深度解析(下)
  • 前端开发技巧:浏览器模拟弱网络环境
  • 【Linux】重生之从零开始学习运维之Nginx
  • 高可用架构设计与实践综述
  • XSS总结
  • 【RK3576】【Android14】固件烧录
  • 零基础学后端-PHP语言(第一期-PHP环境配置)
  • SQL核心语法与实战应用指南