使用类集不仅可以表示出一对一的关系,也可以表示出多对多的关系。例如,一个学生可以选多门课程,一门课程可以有多个学生参加,那么这就是一个典型的多对多关系。
要完成本程序,首先应该定义两个类:学生信息类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;
- }
- 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 ;
- }
- }
在学生类中存在一个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 ;- }
- }
课程类与学生类一样,都定义了一个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);
// 输出课程信息- }
- }
- }
程序运行结果:
- 课程名称:英语;课程学分3
- |- 学生姓名:张三;年龄:20
- |- 学生姓名:李四;年龄:21
- |- 学生姓名:钱八;年龄:25
- 学生姓名:钱八;年龄:25
- |- 课程名称:英语;课程学分3
- |- 课程名称:计算机;课程学分5
从程序来看,设置关系的地方较为复杂,因为现在的程序采用的是双向的处理关系,所以学生在选择一个课程时,除了课程中要添加学生以外,在学生中也要添加课程信息。在输出课程信息时,可以通过课程对象中的集合找到参加此课程的全部学生信息,也可以通过学生对象找到全部参加的课程信息。