欢迎来IT培训班!

咨询热线 18940085928

IT培训网 > 知识学习 > JAVA开发 >

Java多对多关系示例

授课机构:IT培训班

地址:北京

网报价格:详询

课程原价:

咨询热线:18940085928

课程详情 相关推荐 学校地址 网上报名

使用集合不仅可以表示一对一的关系,也可以表示多对多的关系。例如,一个学生可以选多门课程,一门课程可以有多个学生参加,那么这就是一个典型的多对多关系。

要完成上面要求,首先应该定义两个类,分别是学生信息(Student)类、课程信息(Course)类。在学生类中存在一个集合,保存全部的课程。同样,在课程类中也要存在一个集合,保存全部的学生。

1)定义学生类


		
  1. public class Student {
  2. private String name;
  3. private int age;
  4. private List<Course> allCourses; // 定义集合保存全部课程
  5.  
  6. private Student() {
  7. this.allCourses = new ArrayList<Course>();// 实例化List集合
  8. }
  9.  
  10. // 通过构造方法设置内容
  11. public Student(String name, int age) {
  12. // 调用无参构造
  13. this();
  14. this.setName(name);
  15. this.setAge(age);
  16. }
  17.  
  18. public String getName() {
  19. return name;
  20. }
  21.  
  22. public void setName(String name) {
  23. this.name = name;
  24. }
  25.  
  26. public int getAge() {
  27. return age;
  28. }
  29.  
  30. public void setAge(int age) {
  31. this.age = age;
  32. }
  33.  
  34. public List<Course> getAllCourses() {
  35. return allCourses;
  36. }
  37.  
  38. public void setAllCourses(List<Course> allCourses) {
  39. this.allCourses = allCourses;
  40. }
  41.  
  42. // 重写toString()方法
  43. public String toString() {
  44. return "学生姓名:" + this.name + ":年龄" + this.age;
  45. }
  46. }
在学生类中存在一个 allCourses 的 List 集合,这样在程序运行时,一个学生类中可以保存多个 Course 对象。

2)定义课程类


		
  1. public class Course {
  2. private String name;
  3. private int credit;
  4. // 定义集合保存多个学生
  5. private List<Student> allStudents;
  6.  
  7. private Course() {
  8. // 实例化List集合
  9. this.allStudents = new ArrayList<Student>();
  10. }
  11.  
  12. public Course(String name, int credit) {
  13. this();
  14. this.setName(name);
  15. this.setCredit(credit);
  16. }
  17.  
  18. public String getName() {
  19. return name;
  20. }
  21.  
  22. public void setName(String name) {
  23. this.name = name;
  24. }
  25.  
  26. public int getCredit() {
  27. return credit;
  28. }
  29.  
  30. public void setCredit(int credit) {
  31. this.credit = credit;
  32. }
  33.  
  34. public List<Student> getAllStudents() {
  35. return allStudents;
  36. }
  37.  
  38. public void setAllStudents(List<Student> allStudents) {
  39. this.allStudents = allStudents;
  40. }
  41.  
  42. // 重写toString()方法
  43. public String toString() {
  44. return "课程名称" + this.name + ";课程学分" + this.credit;
  45. }
  46. }
课程类与学生类一样,都定义了一个 List 集合,用于保存多个学生信息。

3)测试程序


		
  1. public class TestMore {
  2. public static void main(String[] args) {
  3. // 实例化课程对象
  4. Course c1 = new Course("英语", 3);
  5. Course c2 = new Course("计算机", 5);
  6. // 实例化学生对象
  7. Student s1 = new Student("张三", 20);
  8. Student s2 = new Student("李四", 21);
  9. Student s3 = new Student("王五", 22);
  10. Student s4 = new Student("赵六", 23);
  11. Student s5 = new Student("孙七", 24);
  12. Student s6 = new Student("钱八", 25);
  13. // 第一门课程有3个人参加,向课程中增加3个学生信息,同时向学生中增加课程信息
  14. c1.getAllStudents().add(s1);
  15. c1.getAllStudents().add(s2);
  16. c1.getAllStudents().add(s6);
  17. s1.getAllCourses().add(c1);
  18. s2.getAllCourses().add(c1);
  19. s6.getAllCourses().add(c1);
  20. // 第二门课程有6个人参加,向课程中增加6个学生信息,同时向学生中添加课程信息
  21. // 向课程中增加学生信息
  22. c2.getAllStudents().add(s1);
  23. c2.getAllStudents().add(s2);
  24. c2.getAllStudents().add(s3);
  25. c2.getAllStudents().add(s4);
  26. c2.getAllStudents().add(s5);
  27. c2.getAllStudents().add(s6);
  28. // 像学生中增加课程信息
  29. s1.getAllCourses().add(c2);
  30. s2.getAllCourses().add(c2);
  31. s3.getAllCourses().add(c2);
  32. s4.getAllCourses().add(c2);
  33. s5.getAllCourses().add(c2);
  34. s6.getAllCourses().add(c2);
  35. // 输出一门课程的信息,观察一门课程有多少个学生参加
  36. System.out.println(c1); // 输出第一门课程
  37. Iterator<Student> iter1 = c1.getAllStudents().iterator();
  38. // 迭代输出
  39. while (iter1.hasNext()) {
  40. Student s = iter1.next();
  41. System.out.println("\t" + s);
  42. }
  43. // 输出一个学生参加的课程信息,观察有多少门课程
  44. System.out.println(s6);
  45. Iterator<Course> iter2 = s6.getAllCourses().iterator();
  46. while (iter2.hasNext()) {
  47. // 取得所参加的课程
  48. Course c = iter2.next();
  49. // 输出课程信息
  50. System.out.println("\t" + c);
  51. }
  52. }
  53. }
输出结果如下:

课程名称英语;课程学分3     学生姓名:张三:年龄20     学生姓名:李四:年龄21     学生姓名:钱八:年龄25 学生姓名:钱八:年龄25     课程名称英语;课程学分3     课程名称计算机;课程学分5

从程序来看,设计关系的地方较为复杂,因为现在的程序采用的是双向的处理关系,所以学生在选择一个课程时,除了课程中要添加学生,在学生中也要添加课程信息。在输出课程信息时,可以通过课程对象中的集合找到参加此课程的全部学生信息,也可以通过学生找到全部参加的课程信息。
  • 学校名称:IT培训网

    固定电话:18940085928

    授课地址:线下 预约名额

报名信息