JAVA 多对多例子

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

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

范例:定义学生类

package org.lxh.demo13.execdemo02; import java.util.ArrayList; import java.util.List; public class Student { // 定义学生类 private String name ; // 定义name属性 private int age ; // 定义age属性 private List<Course> allCourses ; // 定义集合保存全部课程 public Student(){// 无参构造 this.allCourses = new ArrayList<Course>() ;// 实例化List集合 } public Student(String name,int age){ // 通过构造设置属性内容 this() ; // 调用无参构造 this.setName(name) ; // 设置name属性内容 this.setAge(age) ; // 设置age属性内容 } public String getName() {// 取得name属性 return name; } public void setName(String name) {// 设置name属性 this.name = name; }

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

范例:定义课程类

package org.lxh.demo13.execdemo02; import java.util.ArrayList; import java.util.List; public class Course { // 定义Course类 private String name ; // 定义name属性 private int credit ; // 定义credit属性,表示学分 private List<Student> allStudents ; // 定义集合保存多个学生 public Course(){ // 无参构造方法 this.allStudents = new ArrayList<Student>() ;// 实例化List集合 } public Course(String name,int credit){ // 设置name和credit 属性 this() ; // 调用无参构造 this.setName(name) ; // 设置name属性 this.setCredit(credit) ; // 设置credit属性 } public String getName() { // 取得name属性 return name; } public void setName(String name) { // 设置name属性 this.name = name; } public int getCredit() { // 取得credit属性 return credit; } public void setCredit(int credit) { // 设置credit属性 this.credit = credit; } public List<Student> getAllStudents() { // 得到全部学生 return allStudents; } public void setAllStudents(List<Student>allStudents) {// 设置全部学生 this.allStudents = allStudents; } public String toString(){ // 覆写toString()方法 return "课程名称:" + this.name + ";课程学分" + this.credit ; } } public int getAge() {// 取得age属性 return age; } public void setAge(int age) {// 设置age属性 this.age = age; } public List<Course> getAllCourses() { // 取得全部课程 return allCourses; } public String toString(){ // 覆写toString()方法 return "学生姓名:" + this.name + ";年龄:" + this.age ; } }

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

范例:测试程序

package org.lxh.demo13.execdemo02; import java.util.Iterator; 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); // 输出课程信息 } } }

输出结果:

  1. 课程名称:英语;课程学分3

  2. |-学生姓名:张三;年龄:20

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

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

  5. 学生姓名:钱八;年龄:25

  6. |-课程名称:英语;课程学分3

  7. |-课程名称:计算机;课程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值