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

要完成上面要求,首先应该定义两个类,分别是学生信息(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

程序采用的是双向的处理关系,所以学生在选择一个课程时,除了课程中要添加学生,在学生中也要添加课程信息。在输出课程信息时,可以通过课程对象中的集合找到参加此课程的全部学生信息,也可以通过学生找到全部参加的课程信息。

Java多对多关系示例相关推荐

  1. java多对多关系实例_【Java一对多关系实例公布,你的Java真的可以玩的这么好吗】- 环球网校...

    [摘要]作为一门面向对象编程语言,Java吸收了C++语言的优点,也展现了其强大的一面,我们能在各个地方看到其功能强大和简单易用的两个特征,当然,也吸引了很多程序员的注意力,所以就有人想了解Java的 ...

  2. Java一对多、多对多关系示例

    一对多 生活中常见一对多关系的例子,如一个学校可以包含多个学生,一个学生属于一个学校,那么这就是一个典型的一对多关系,可以通过集合进行关系的表示. 下面是基于集合应用的一个示例,这个示例将作为以后 J ...

  3. java 一对多、多对多关系示例

    一对多 生活中常见一对多关系的例子,如一个老师教多个学生,一个学生属于一个老师,那么这就是一个典型的一对多关系,可以通过集合进行关系的表示. 定义一个学生类 public class Student ...

  4. Java一对多关系示例

    生活中常见一对多关系的例子,如一个学校可以包含多个学生,一个学生属于一个学校,那么这就是一个典型的一对多关系,可以通过集合进行关系的表示. 1 . 定义学生类 import java.util.Has ...

  5. 数据库多对多关系示例 - 使用sqlite演示

    多对多,可以理解为是一对多和多对一的组合:要实现多对多,一般都需要有一张中间表(也叫关联表),将两张表进行关联,形成多对多的形式: 例如:     老师表.班级表.课程表,中间表为:课程表: 如果sq ...

  6. EF 多对多关系 中间表操作

    EF多对多关系中间表简单操作 业务场景 新增中间表 修改中间表 业务场景 业务中碰到两个表是多对多关系 示例:实际数据库中是表Users(用户表)和 表Rooms(办公室),和中间表UserRooms ...

  7. 如何使用PowerDesigner软件进行数据库设计(多对多关系)

    如何使用PowerDesigner软件进行数据库设计(多对多关系) 1 多对多关系示例 2 创建CDM 3 建立实体之间的联系 4 检查CDM 5 将CDM转换成PDM 6 由PDM生成sql文件 1 ...

  8. mysql简单介绍一对一,一对多,多对多关系处理办法

    一对一关系示例:一个学生对应一个学生档案材料,或者每个人都有唯一的身份证编号. 一对多关系示例:一个学生只属于一个班,但是一个学院有多名学生. 多对多关系示例:一个学生可以选择多门课,一门课也有多名学 ...

  9. java多对多的存储_Swift CoreData,通过多对多关系保存数据

    对于任何或所有,我正在寻找有关Swift CoreData的一些功能的帮助,特别是在将数据保存到两个具有"多对多"关系的实体时 . 我已经搜索了这个网站,我也参加了三个不同的uDe ...

最新文章

  1. vue拖动添加模块展示_一个全新的Vue拖拽特性实现:“移动”部分
  2. 数据结构特性解析 (四)LinkedList
  3. css3-响应式布局
  4. PrincipleCTEbook
  5. 数学除了摧残祖国的花朵外,竟然还可以赢钱!
  6. 使用面向对象(OO)的思想,实现循环输入多个会员的信息,根据会员编号,查找会员积分
  7. C++网络编程快速入门(三):阻塞与非阻塞式调用网络通信函数
  8. live555学习笔记3-消息循环
  9. ice 服务java连接,java - ICE中的连接计数 - 堆栈内存溢出
  10. Find the longest route with the smallest starting point
  11. “三步走”助你完成领导者转变
  12. ui自动化分享ppt_全面迎接自动化!微软公布RPA价格,将于4月2日正式上市
  13. 手撸Mybatis源码-基础版
  14. Win10指定用户访问共享文件及“无法访问。你可能没有权限使用网络资源。”问题解决
  15. Java程序员面试时,如何进行自我介绍呢?
  16. linux c 操作word文档,C and Word and linux 总结.doc
  17. 怎么在windows笔记本使用html,笔记本上快捷键用不了 笔记本电脑上音量键用不了了...
  18. 银色 MacBook Pro 13.3笔记本
  19. Python笔记之自定义函数
  20. 我的世界服务器背景音乐修改,我的世界怎么修改音乐 我的世界音乐修改方法教程...

热门文章

  1. Win11系统怎么取消登录密码 Win11取消登录密码图文教程
  2. Win7系统还原声音图标的方法
  3. SXSSFWorkbook使用——使用excel模板
  4. of方法:给集合一次性添加多个元素
  5. matlab 由移相角如何产生移相脉冲,整流电路控制角移相范围是怎么确定的?
  6. android imageview 设置网络图片,ImageView加载网络图片
  7. java自动识别验证码_Java使用OCR技术识别验证码实现自动化登陆方法
  8. epic登陆按钮一直在转_双剑合璧!GOG GALAXY 2.0官方支持Epic商店集成
  9. php伪静态后301,动态地址rewrite伪静态,然后301跳转到伪静态时死
  10. desktop docker 无法卸载_关于Docker:Docker – 无法移除死容器