2024.11.19
设计模式实验十八
软件设计 石家庄铁道大学信息学院
实验18:迭代器模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解迭代器模式的动机,掌握该模式的结构;
2、能够利用迭代器模式解决实际问题。
[实验任务一]:JAVA和C++常见数据结构迭代器的使用
信1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA内置迭代器和C++中标准模板库(STL)实现对同学信息的遍历,要求按照学号从小到大和从大到小两种次序输出学生信息。
实验要求:
1. 搜集并掌握JAVA和C++中常见的数据结构和迭代器的使用方法,例如,vector, list, map和set等;
Java 常见数据结构及迭代器
1. Vector是一个动态数组,可以存储对象,支持线程安全(已过时,推荐用 ArrayList
2. List (ArrayList, LinkedList)
ArrayList:动态数组,支持快速随机访问。
LinkedList:双向链表,适合频繁插入、删除。
3. Map (HashMap, TreeMap)
HashMap:基于哈希表,允许 null 键和 null 值。
TreeMap:基于红黑树,按键值排序。
4. Set (HashSet, TreeSet)
HashSet:基于哈希表,元素无序且不重复。
TreeSet:基于红黑树,元素有序。
C++ 常见数据结构及迭代器
C++ 提供的容器主要在 STL (Standard Template Library) 中:
1.Vector动态数组,支持随机访问。
2. List:双向链表,适合插入、删除操作。
3. Map:键值对,基于红黑树,键有序。
Unordered_Map:哈希表实现,键无序。
4. Set:红黑树实现,无重复元素。
Unordered_Set:哈希表实现,元素无序。
2. 提交源代码;
import java.util.*;
class Student {
String name;
String studentId;
int age;
public Student(String name, String studentId, int age) {
this.name = name;
this.studentId = studentId;
this.age = age;
}
@Override
public String toString() {
return "Student{name='" + name + "', studentId='" + studentId + "', age=" + age + '}';
}
}
public class StudentIterator {
public static void main(String[] args) {
List<Student> students = new ArrayList<>();
// 初始化学生数据
students.add(new Student("Alice", "1305001", 20));
students.add(new Student("Bob", "1305003", 21));
students.add(new Student("Charlie", "1305002", 22));
// 按学号升序排序
students.sort(Comparator.comparing(s -> s.studentId));
System.out.println("按学号升序:");
for (Student student : students) {
System.out.println(student);
}
// 按学号降序排序
students.sort((s1, s2) -> s2.studentId.compareTo(s1.studentId));
System.out.println("\n按学号降序:");
for (Student student : students) {
System.out.println(student);
}
}
}
3. 注意编程规范。