之前给大家分享了java一对多关系示例,那么下面要给大家分享的就是java多对多关系示例,一起来看看吧。
使用集合不仅仅能够表示一对一的关系,也能够表示多对多的关系,例:一个学生可以选多门课程,一门课程可以有多个学生参加,这个的话,就是一个非常典型的多对多关系。
想要完成上面的要求的话,那么首先就应该定义两个类,学生信息(Student)类、课程信息(Course)类。
在学生类中存在一个集合,保存全部的课程,同样的话,在课程类中也要存在一个集合,保存全部的学生。
1、定义学生类(在学生类当中,存在一个allCourses 的 List集合,这样的话,在程序运行的时候,一个学生类当中能够保存多个Course对象)。
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; } }
2、定义课程类(课程类和学生类相同,都定义了一个List集合,用来保存多个学生信息)。
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; } }
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); } } }
输出结果:
从程序上面来看的话,设计关系的地方比较的复杂,因为现在的程序采用的是双向的处理关系,所以学生在选择一个课程时,除了课程中要添加学生,在学生中也要添加课程信息,在输出课程信息的时候,能够通过课程对象中的集合找到参加此课程的全部学生信息,也能够通过学生找到全部参加的课程信息。
更多java程序代码例子,可以继续关注奇Q工具网来进行了解呢。
推荐阅读: