Java第十二周学习博客(1)
0J0ava第十二周学习博客
Java第十二周学习博客
一、本周学习概述
本周主要深入学习了Java集合体系中的Map集合、泛型的进阶使用,同时巩固了异常处理的实战应用。相较于之前学习的List、Set单列集合,Map双列集合是日常开发中键值对存储数据的核心工具,也是项目开发、算法刷题的重点内容。本周通过理论学习、代码实操和案例练习,掌握了Map集合的特性、常用实现类、遍历方式以及泛型在集合中的规范使用,解决了开发中数据映射存储、类型不安全等常见问题。
二、核心知识点学习总结
(一)Map集合概述
Map是Java.util包下的双列集合,以「键(Key)-值(Value)」的形式存储数据,一个键对应一个唯一的值,键不可重复,值可以重复。
Map集合与List、Set最大的区别:List和Set是单列集合,单次存储一个元素;Map是双列集合,单次存储一对键值对元素。
常用应用场景:存储用户ID与用户信息、学生学号与姓名、参数键值对等一一对应的数据。
(二)Map常用实现类
- HashMap(重点)
底层基于哈希表实现,无序、查询速度快,是最常用的Map集合。允许存储null键和null值,线程不安全,适合单线程开发场景。日常开发中90%的键值对存储场景都会使用HashMap。
- LinkedHashMap
继承自HashMap,底层基于哈希表+双向链表实现,保留元素插入顺序,解决了HashMap无序的问题,适合需要保证数据存储顺序的场景。
- TreeMap
底层基于红黑树实现,可以根据键的自然排序或自定义排序对元素进行排序,适合需要对键进行有序排列的场景。
(三)Map集合常用核心方法
本周重点掌握了Map的增、删、查、获取键值、判断等核心方法,所有方法均通过代码实操验证:
- put(K key, V value):向集合中添加键值对,若键重复,新值会覆盖旧值;
- get(Object key):根据键获取对应的值,键不存在则返回null;
- remove(Object key):根据键删除对应的键值对,返回被删除的值;
- containsKey(Object key):判断集合中是否包含指定键,返回布尔值;
- keySet():获取集合中所有键的Set集合;
- values():获取集合中所有值的Collection集合;
- entrySet():获取所有键值对对象的集合,是高效遍历Map的核心方法。
(四)Map集合三种遍历方式
遍历是Map集合的核心实操考点,本周熟练掌握了三种遍历方式,适配不同开发场景:
- 键找值遍历:先通过keySet()获取所有键,再循环通过get()获取值,代码简单但效率较低;
- 键值对对象遍历(推荐):通过entrySet()获取键值对对象,直接获取键和值,遍历效率最高,适合大数据量场景;
- Lambda表达式遍历(JDK8+):简洁优雅,代码量最少,适合日常快速开发。
(五)泛型进阶应用
此前仅了解泛型基础,本周结合集合深化学习:
- 泛型的作用:约束集合元素类型,避免任意类型数据存入集合,解决类型转换异常问题,实现编译期类型检查;
- 集合规范写法:必须指定泛型类型<String, Integer>`,杜绝使用裸集合;
- 泛型通配符:了解?任意通配符、? extends E上限通配符、? super E下限通配符,适配方法参数泛型接收场景。
(六)异常处理巩固
结合本周代码练习,复习了编译时异常和运行时异常的区别,熟练使用try-catch-finally捕获处理集合操作中的空指针异常、类型转换异常,养成代码异常防护的开发习惯。
三、核心代码实操示例
所有示例统一在Main类中实现,简洁易懂,贴合课堂实操要求:
import java.util.HashMap; import java.util.Map; import java.util.Set; public class Main { public static void main(String[] args) { // 1.创建HashMap集合,指定泛型:键为学号,值为姓名 <String, String><>(); // 2.添加键值对 studentMap.put("2025401181", "张三"); studentMap.put("2025401182", "李四"); studentMap.put("2025401183", "王五"); // 重复键,覆盖旧值 studentMap.put("2025401183", "赵六"); // 3.基础方法测试 System.out.println("根据键获取值:" + studentMap.get("2025401182")); System.out.println("是否包含指定键:" + studentMap.containsKey("2025401181")); System.out.println("删除元素:" + studentMap.remove("2025401181")); System.out.println("集合所有元素:" + studentMap); // 4.键找值遍历 System.out.println("\n=====键找值遍历====="); Set<String> keySet = studentMap.keySet(); for (String key : keySet) { System.out.println("学号:" + key + ",姓名:" + studentMap.get(key)); } // 5.键值对对象遍历(高效推荐) System.out.println("\n=====键值对对象遍历====="); for (Map<String, String> entry : studentMap.entrySet()) { System.out.println("学号:" + entry.getKey() + ",姓名:" + entry.getValue()); } // 6.Lambda遍历 System.out.println("\n=====Lambda遍历====="); studentMap.forEach((key, value) -> System.out.println("学号:" + key + ",姓名:" + value)); } } |
四、本周学习难点与问题解决
1. 难点一:Map键不可重复的底层原理
初期不理解为什么键重复会覆盖值,通过查阅资料理解:HashMap底层通过哈希值判断键是否重复,若两个键的哈希值相同且内容相同,新的value会直接替换旧value,保证键的唯一性。
2. 难点二:三种遍历方式的场景选择
初期混用遍历方式,不清楚优劣。总结得出:小数据量简单遍历可用键找值;开发中优先使用entrySet遍历,效率最高;日常测试、快速编码使用Lambda遍历,代码最简洁。
3. 常见报错解决:泛型不匹配
因初期书写裸集合出现类型转换异常,后续严格遵守泛型规范,创建集合时明确指定键值类型,从编译阶段规避类型安全问题。
五、本周学习总结与下周计划
学习总结
本周重点掌握了Java Map双列集合的核心知识和实战用法,厘清了单列集合与双列集合的区别,熟练掌握了Map的增删改查和三种遍历方式,同时规范了泛型的使用。Map集合是Java开发的核心基础,在数据存储、参数传递、框架底层源码中广泛应用,通过本周练习,弥补了集合体系的知识短板,代码编写的规范性和实用性大幅提升。
下周学习计划
- 深入学习HashMap底层哈希表原理、扩容机制,理解集合底层逻辑;
- 学习Collections工具类,掌握集合的排序、打乱、同步处理等工具方法;
完成集合综合案例练习,结合List、Map实现学生信息管理小案例,巩固所学知识。

浙公网安备 33010602011771号