Java 第五章第六章 案例教程
Java 第五章第六章 案例教程说明:本教程承接前四章,深入讲解Java集合框架与输入输出流。第五章聚焦集合框架(List、Set、Map、迭代器、Collections工具类、泛型);第六章讲解输入输出流(File类、字节流、字符流、缓冲流、对象序列化、Properties)。通过“学生管理系统升级”和“文件配置读写”实战串联知识点。第一部分:第五章 集合框架一、背景故事:小杨需要更强大的数据容器小杨的学生成绩管理系统使用数组存储学生,但数组长度固定,无法动态增减。他需要能够自动扩容、方便插入删除的容器,还要能按学号快速查找学生。Java 集合框架提供了 ArrayList、HashSet、HashMap 等强大工具。二、集合框架概述Java 集合框架(Collection Framework)是一组用于存储和操作对象的接口和类,位于 java.util 包。核心接口层次:Iterable (接口) │ └── Collection (接口) ├── List (接口) —— 有序、可重复 │ ├── ArrayList (类) │ ├── LinkedList (类) │ └── Vector (类,线程安全) └── Set (接口) —— 无序、不可重复 ├── HashSet (类) ├── LinkedHashSet (类) —— 保持插入顺序 └── TreeSet (类) —— 排序 Map (接口) —— 键值对,键不可重复 ├── HashMap (类) ├── LinkedHashMap (类) —— 保持插入顺序 └── TreeMap (类) —— 按键排序三、List 接口特点:有序(按插入顺序)、可重复、有索引。3.1 ArrayList(动态数组)底层是数组,查询快,增删慢(末尾增删快)。importjava.util.ArrayList;importjava.util.List;ListStringnames=newArrayList();// 增names.add("张三");names.add("李四");names.add(1,"王五");// 插入索引1// 查Stringfirst=names.get(0);// 改names.set(0,"赵六");// 删names.remove(1);// 按索引删除names.remove("李四");// 按对象删除// 遍历for(inti=0;inames.size();i++){System.out.println(names.get(i));}for(Strings:names){System.out.println(s);}// 其他方法booleancontains=names.contains("张三");intindex=names.indexOf("李四");booleanempty=names.isEmpty();names.clear();// 清空3.2 LinkedList(双向链表)底层是链表,增删快(尤其是头尾),查询慢。LinkedListStringqueue=newLinkedList();queue.addLast("A");// 尾部添加queue.addFirst("B");// 头部添加Stringfirst=queue.removeFirst();// 弹出头部Stringlast=queue.removeLast();// 弹出尾部3.3 Vector(线程安全,但性能差,已不推荐)四、Set 接口特点:无序、元素不可重复(通过 equals() 和 hashCode() 判断)。4.1 HashSet(哈希表)SetStringset=newHashSet();set.add("苹果");set.add("香蕉");set.add("苹果");// 重复,不会添加System.out.println(set.size());// 2for(Strings:set){System.out.println(s);}4.2 LinkedHashSet保持插入顺序。SetStringlhs=newLinkedHashSet();lhs.add("C");lhs.add("A");lhs.add("B");System.out.println(lhs);// [C, A, B] 插入顺序4.3 TreeSet(排序)元素必须可比较(实现 Comparable 接口),或传入 Comparator。SetIntegernums=newTreeSet();nums.add(5);nums.add(2);nums.add(8);System.out.println(nums);// [2, 5, 8] 自然排序五、Map 接口存储键值对,键唯一,值可重复。5.1 HashMapMapString,Integerscores=newHashMap();// 添加scores.put("张三",85);scores.put("李四",92);scores.put("张三",90);// 覆盖旧值// 获取intscore=scores.get("张三");// 90Integerscore2=scores.get("王五");// null,不存在// 遍历 key 和 valuefor(Stringname:scores.keySet()){System.out.println(name+" - "+scores.get(name));}for(Map