Map集合
一、什么是 Map 集合?
- Map 是 Java 集合框架中用来存储“键值对”数据的一种结构。
- 每一组数据都包含一个“键”(key)和一个“值”(value),通过“键”可以快速找到对应的“值”。
- 常见的实现类有:HashMap、TreeMap、LinkedHashMap 等。
二、Map 的基本特点
- 键唯一,值可以重复
- 一个 Map 里,键(key)不能重复,值(value)可以重复。
- 通过键查找值
- 你只要知道 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类型。
- 泛型让集合更安全,防止类型错误。