设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

Java多对多关系示例

发布时间:2022-07-13 11:03 所属栏目:51 来源:互联网
导读:
导读:使用集合不仅可以表示一对一的关系,也可以表示多对多的关系。例如,一个学生可以选多门课程,一门课程可以有多个学生参加,那么这就是一个典型的多对多关系。 要完成上面要求,首先应该定义两个类,分别是学生信息(Student)类、课程信息(Course)类。在
  使用集合不仅可以表示一对一的关系,也可以表示多对多的关系。例如,一个学生可以选多门课程,一门课程可以有多个学生参加,那么这就是一个典型的多对多关系。
 
  要完成上面要求,首先应该定义两个类,分别是学生信息(Student)类、课程信息(Course)类。在学生类中存在一个集合,保存全部的课程。同样,在课程类中也要存在一个集合,保存全部的学生。
  1)定义学生类
  public class Student {
      private String name;
      private int age;
      private List<Course> allCourses; // 定义集合保存全部课程
      private Student() {
          this.allCourses = new ArrayList<Course>();// 实例化List集合
      }
      // 通过构造方法设置内容
      public Student(String name, int age) {
          // 调用无参构造
          this();
          this.setName(name);
          this.setAge(age);
      }
      public String getName() {
          return name;
      }
      public void setName(String name) {
          this.name = name;
      }
      public int getAge() {
          return age;
      }
      public void setAge(int age) {
          this.age = age;
      }
      public List<Course> getAllCourses() {
          return allCourses;
      }
      public void setAllCourses(List<Course> allCourses) {
          this.allCourses = allCourses;
      }
      // 重写toString()方法
      public String toString() {
          return "学生姓名:" + this.name + ":年龄" + this.age;
      }
  }
  在学生类中存在一个 allCourses 的 List 集合,这样在程序运行时,一个学生类中可以保存多个 Course 对象。
  2)定义课程类
  public class Course {
      private String name;
      private int credit;
      // 定义集合保存多个学生
      private List<Student> allStudents;
      private Course() {
          // 实例化List集合
          this.allStudents = new ArrayList<Student>();
      }
      public Course(String name, int credit) {
          this();
          this.setName(name);
          this.setCredit(credit);
      }
      public String getName() {
          return name;
      }
      public void setName(String name) {
          this.name = name;
      }
      public int getCredit() {
          return credit;
      }
      public void setCredit(int credit) {
          this.credit = credit;
      }
      public List<Student> getAllStudents() {
          return allStudents;
      }
      public void setAllStudents(List<Student> allStudents) {
          this.allStudents = allStudents;
      }
      // 重写toString()方法
      public String toString() {
          return "课程名称" + this.name + ";课程学分" + this.credit;
      }
  }
  课程类与学生类一样,都定义了一个 List 集合,用于保存多个学生信息。
  3)测试程序
  public class TestMore {
      public static void main(String[] args) {
          // 实例化课程对象
          Course c1 = new Course("英语", 3);
          Course c2 = new Course("计算机", 5);
          // 实例化学生对象
          Student s1 = new Student("张三", 20);
          Student s2 = new Student("李四", 21);
          Student s3 = new Student("王五", 22);
          Student s4 = new Student("赵六", 23);
          Student s5 = new Student("孙七", 24);
          Student s6 = new Student("钱八", 25);
          // 第一门课程有3个人参加,向课程中增加3个学生信息,同时向学生中增加课程信息
          c1.getAllStudents().add(s1);
          c1.getAllStudents().add(s2);
          c1.getAllStudents().add(s6);
          s1.getAllCourses().add(c1);
          s2.getAllCourses().add(c1);
          s6.getAllCourses().add(c1);
          // 第二门课程有6个人参加,向课程中增加6个学生信息,同时向学生中添加课程信息
          // 向课程中增加学生信息
          c2.getAllStudents().add(s1);
          c2.getAllStudents().add(s2);
          c2.getAllStudents().add(s3);
          c2.getAllStudents().add(s4);
          c2.getAllStudents().add(s5);
          c2.getAllStudents().add(s6);
          // 像学生中增加课程信息
          s1.getAllCourses().add(c2);
          s2.getAllCourses().add(c2);
          s3.getAllCourses().add(c2);
          s4.getAllCourses().add(c2);
          s5.getAllCourses().add(c2);
          s6.getAllCourses().add(c2);
          // 输出一门课程的信息,观察一门课程有多少个学生参加
          System.out.println(c1); // 输出第一门课程
          Iterator<Student> iter1 = c1.getAllStudents().iterator();
          // 迭代输出
          while (iter1.hasNext()) {
              Student s = iter1.next();
              System.out.println("\t" + s);
          }
          // 输出一个学生参加的课程信息,观察有多少门课程
          System.out.println(s6);
          Iterator<Course> iter2 = s6.getAllCourses().iterator();
          while (iter2.hasNext()) {
              // 取得所参加的课程
              Course c = iter2.next();
              // 输出课程信息
              System.out.println("\t" + c);
          }
      }
  }
  输出结果如下:
  课程名称英语;课程学分3
      学生姓名:张三:年龄20
      学生姓名:李四:年龄21
      学生姓名:钱八:年龄25
  学生姓名:钱八:年龄25
      课程名称英语;课程学分3
      课程名称计算机;课程学分5
 
  从程序来看,设计关系的地方较为复杂,因为现在的程序采用的是双向的处理关系,所以学生在选择一个课程时,除了课程中要添加学生,在学生中也要添加课程信息。在输出课程信息时,可以通过课程对象中的集合找到参加此课程的全部学生信息,也可以通过学生找到全部参加的课程信息。

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读