java多对多关系实例_java类集开发中一对多和多对多的关系的实现

摘自《java开发实战经典》李兴华.著

一对多的关系

一个学校可以包含多个学生,一个学生属于一个学校,那么这就是一个典型的一对多关系,此时就可以通过类集进行关系的表示。

在定义Student类中包含了一个School属性,表示一个学生属于一个学校。在程序运行时,只需要传入School类的引用就可以完成这样的关系。

在定义School类时定义了一个List类型的属性,并指定其泛型类型是Student类型,这样一来就表示在一个School对象中会包含多个Student类型的引用。

最后在主函数设置学校和学生的对应关系。也可以用Map来实现学校映射学生的list集合之间的关系。

1 import java.util.*;2 public class TestDemo{//设置学校和学生的关系

3 public static voidmain(String args[]){4 School sch = new School("清华大学") ;//实例化学校对象

5 Student s1 = new Student("张三",21) ;//实例化学生对象

6 Student s2 = new Student("李四",22) ;7 Student s3 = new Student("王五",23) ;8 sch.getAllStudents().add(s1) ;//在学校中加入学生

9 sch.getAllStudents().add(s2) ;10 sch.getAllStudents().add(s3) ;11 s1.setSchool(sch) ;//一个学生属于一个学校

12 s2.setSchool(sch) ;13 s3.setSchool(sch) ;14 System.out.println(sch) ;15 Iterator iter =sch.getAllStudents().iterator() ;16 while(iter.hasNext()){17 System.out.println("\t|- " +iter.next()) ;18 }19 }20 }21

22 //学生类

23 classStudent{24 privateString name ;25 private intage ;26 private School school; //一个学生属于一个学校

27 public Student(String name,intage){28 this.setName(name) ;29 this.setAge(age) ;30 }31 public voidsetSchool(School school){32 this.school =school ;33 }34 publicSchool getSchool(){35 return this.school ;36 }37 public voidsetName(String name){38 this.name =name ;39 }40 public void setAge(intage){41 this.age =age ;42 }43 publicString getName(){44 return this.name;45 }46 public intgetAge(){47 return this.age ;48 }49 publicString toString(){50 return "学生姓名:" + this.name + ";年龄:" + this.age ;51 }52 }53

54 //学校类

55 classSchool{56 privateString name ;57 private List allStudents ;//一个学校有多个学生

58 publicSchool(String name){59 this.allStudents = new ArrayList();60 this.setName(name) ;61 }62 public voidsetName(String name){63 this.name =name ;64 }65 publicString getName(){66 return this.name;67 }68 public List getAllStudents(){//取得全部的学生

69 return this.allStudents ;70 }71 publicString toString(){72 return "学校名称:" + this.name ;73 }74 }

多对多关系

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

要完成本程序,首先应该定义两个类:学生信息类Student、课程信息类Course。在一个学生类中存在一个集合,保存全部的课程;而在课程类中也要存在一个集合,保存全部的学生。

1 import java.util.*;2 //定义学生类

3 classStudent {4 privateString name ;5 private intage ;6 private List allCourses ; //定义集合保存全部课程

7 public Student(){//无参构造

8 this.allCourses = new ArrayList() ;//实例化List集合

9 }10 public Student(String name,int age){ //通过构造设置属性内容

11 this() ; //调用无参构造

12 this.setName(name) ; //设置name属性内容

13 this.setAge(age) ; //设置age属性内容

14 }15 publicString getName() {16 returnname;17 }18 public voidsetName(String name) {19 this.name =name;20 }21 public intgetAge() {22 returnage;23 }24 public void setAge(intage) {25 this.age =age;26 }27 public List getAllCourses() { //取得全部课程

28 returnallCourses;29 }30 public String toString(){ //覆写toString()方法

31 return "学生姓名:" + this.name + ";年龄:" + this.age ;32 }33 }34

35

36 //在学生类中存在一个allCourses的List集合,这样在程序运行时,一个学生类中可以保存多个Course对象。37

38 //定义课程类

39 classCourse {40 private String name ; //

41 private int credit ; //定义学分

42 private List allStudents ; //定义集合保存多个学生

43 public Course(){ //无参构造方法

44 this.allStudents = new ArrayList() ;//实例化List集合

45 }46 public Course(String name,int credit){ //

47 this() ;48 this.setName(name) ;49 this.setCredit(credit) ;50 }51 publicString getName() {52 returnname;53 }54 public voidsetName(String name) {55 this.name =name;56 }57 public intgetCredit() {58 returncredit;59 }60 public void setCredit(intcredit) {61 this.credit =credit;62 }63 public List getAllStudents() { //得到全部学生

64 returnallStudents;65 }66 public void setAllStudents(ListallStudents) {//设置全部学生

67 this.allStudents =allStudents;68 }69 publicString toString(){70 return "课程名称:" + this.name + ";课程学分" + this.credit ;71 }72 }73

74 //课程类与学生类一样,都定义了一个List集合,用于保存多个学生信息。

75

76

77

78

79 public classTestMore {80 public static voidmain(String args[]) {81 Course c1 = new Course("英语", 3); //实例化课程对象

82 Course c2 = new Course("计算机", 5);83 Student s1 = new Student("张三", 20); //实例化学生对象

84 Student s2 = new Student("李四", 21);85 Student s3 = new Student("王五", 22);86 Student s4 = new Student("赵六", 23);87 Student s5 = new Student("孙七", 24);88 Student s6 = new Student("钱八", 25);89 //第一门课程有3个人参加,向课程中增加3个学生信息,同时向学生中增加课程信息

90 c1.getAllStudents().add(s1); //向课程增加学生信息

91 c1.getAllStudents().add(s2);92 c1.getAllStudents().add(s6);93 s1.getAllCourses().add(c1); //向学生中增加课程信息

94 s2.getAllCourses().add(c1);95 s6.getAllCourses().add(c1);96 //第二门课程有6个人参加,向课程中增加6个学生信息,同时向学生中增加课程信息

97 c2.getAllStudents().add(s1); //向课程增加学生信息

98 c2.getAllStudents().add(s2);99 c2.getAllStudents().add(s3);100 c2.getAllStudents().add(s4);101 c2.getAllStudents().add(s5);102 c2.getAllStudents().add(s6);103 s1.getAllCourses().add(c2);//向学生中增加课程信息

104 s2.getAllCourses().add(c2);105 s3.getAllCourses().add(c2);106 s4.getAllCourses().add(c2);107 s5.getAllCourses().add(c2);108 s6.getAllCourses().add(c2);109 //输出一门课程的信息,观察一门课程有多少个学生参加

110 System.out.println(c1); //输出第一门课程信息

111 Iterator iter1 =c1.getAllStudents().iterator();112 while (iter1.hasNext()) { //迭代

113 Student s = iter1.next();//取出学生对象

114 System.out.println("\t|- " + s); //输出学生信息

115 }116 //输出一个学生参加的课程信息,观察有多少门课程

117 System.out.println(s6); //输出学生信息

118 Iterator iter2 =s6.getAllCourses().iterator();119 while (iter2.hasNext()) { //迭代

120 Course c = iter2.next(); //取得所参加的课程

121 System.out.println("\t|- " + c); //输出课程信息

122 }123 }124 }125 ---------- java ----------

126 课程名称:英语;课程学分3127 |- 学生姓名:张三;年龄:20

128 |- 学生姓名:李四;年龄:21

129 |- 学生姓名:钱八;年龄:25

130 学生姓名:钱八;年龄:25

131 |-课程名称:英语;课程学分3132 |-课程名称:计算机;课程学分5133

134 输出完成 (耗时 0 秒) - 正常终止

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值