类集范例(一对多关系和多对多关系)

之前我们学习的面向对象(基础篇)中的一对一关系:  面向对象(基础篇)一对一关系 
以下这两个范例是Java EE的基础

范例一:一对多关系 
使用类集可以表示以下关系:一所学校可以有多名学生,一名学生属于一所学校;

package zz.onetoomanydemo;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;

class Student{
	private String name;
	private int age;
	private School school;

	public Student(String name, int age){
		this.setName(name);
		this.setAge(age);
		//this.name = name;
		//this.age = age;
	}
	public void setName(String name){
		this.name = name;
	}
	public String getName(){
		return this.name;
	}
	public void setAge(int age){
		this.age = age;
	}
	public int getAge(){
		return this.age;
	}
	public void setSchool(School school){
		this.school = school;
	}
	public School getSchool(){
		return this.school;
	}
	public String toString(){
		return "学生姓名:" + this.getName() + "; 年龄:" + this.getAge();
	}
}

class School{
	private String name;
	private List<Student> allStudents;

	public School(){	// 无参构造
		this.allStudents = new ArrayList<Student>();		// 实例化 List 集合
	}
	public School(String name){		// 通过构造设置属性
		this();			// 调用构造
		this.setName(name);			// 设置属性内容
	}

	public void setName(String name){
		this.name = name;
	}
	public String getName(){
		return this.name;
	}

	public List<Student> getAllStudents(){
	// public Student getAllStudents(){
		return allStudents;
	}
	public String toString(){
		return "学校姓名:" + this.getName();
	}
}


public class TestDemo01{
	public static void main(String []args){
		// 实例化学校 和 多名学生对象
		School school = new School("清华大学");
		Student	s1 = new Student("张三", 18);
		Student s2 = new Student("李四", 19);
		Student s3 = new Student("王五", 20);
		//List<Student> allStudents = new ArrayList<Student>();
		// 在学校中加入学生
		school.getAllStudents().add(s1);
		school.getAllStudents().add(s2);
		school.getAllStudents().add(s3);
		// 一个学生属于一个学校
		s1.setSchool(school);
		s2.setSchool(school);
		s3.setSchool(school);
		// 输出学生全部信息,用什么你懂的
		Iterator<Student> iter = school.getAllStudents().iterator();
		System.out.println(school);
		while (iter.hasNext()){
			System.out.println("\t|-" + iter.next());
		}
	}
}

程序运行结果:
学校姓名:清华大学
        |-学生姓名:张三; 年龄:18
        |-学生姓名:李四; 年龄:19
        |-学生姓名:王五; 年龄:20

范例二:多对多关系 
一名学生可以选修多门课程,一门课程可以被多名学生选修。

package zz.manytomanydemo;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;
// 学生可以选多门课程,一门课程可以被多名学生选择;典型的多对多关系 
class Student{
	private String name;
	private int age;
	private List<Course> allCourses;
	public Student(){
		this.allCourses = new ArrayList<Course>();
	}
	public Student(String name, int age){
		this();
		this.setName(name);
		this.setAge(age);
		//this.name = name;
		//this.age = age;
	}
	public void setName(String name){
		this.name = name;
	}
	public String getName(){
		return this.name;
	}
	public void setAge(int age){
		this.age = age;
	}
	public int getAge(){
		return this.age;
	}

	public List<Course> getAllCourses(){
		return this.allCourses;
	}
	public String toString(){
		return "学生姓名:" + this.getName() + "; 年龄:" + this.getAge();
	}
}

class Course{
	private String name;
	private List<Student> allStudents;

	public Course(){	// 无参构造
		this.allStudents = new ArrayList<Student>();		// 实例化 List 集合
	}
	public Course(String name){		// 通过构造设置属性
		this();			// 调用构造
		this.setName(name);			// 设置属性内容
	}

	public void setName(String name){
		this.name = name;
	}
	public String getName(){
		return this.name;
	}

	public List<Student> getAllStudents(){
	// public Student getAllStudents(){
		return allStudents;
	}
	public String toString(){
		return "课程名称:" + this.getName();
	}
}

// 现加入两门课程,6名学生信息,测试程序
public class TestDemo02{
	public static void main(String []args){
		// 实例化课程 和 学生信息
		Student s1 = new Student("张三", 18);
		Student s2 = new Student("李四", 19);
		Student s3 = new Student("王五", 20);
		Student s4 = new Student("赵六", 21);
		Student s5 = new Student("孙七", 22);
		Student s6 = new Student("钱八", 23);
		Course c1 = new Course("《Java程序设计》");
		Course c2 = new Course("《Android手机开发》");

		//《Java开发》有3人参加,向该课程中增加这3个学生信息,同时向学生中增加该课程信息
		s1.getAllCourses().add(c1);
		s2.getAllCourses().add(c1);
		s3.getAllCourses().add(c1);
		c1.getAllStudents().add(s1);
		c1.getAllStudents().add(s2);
		c1.getAllStudents().add(s3);

		//《Android手机开发》全部学生参加,向该课程中增加全部学生信息,同时向学生中增加该课程信息
		s1.getAllCourses().add(c2);
		s2.getAllCourses().add(c2);
		s3.getAllCourses().add(c2);
		s4.getAllCourses().add(c2);
		s5.getAllCourses().add(c2);
		s6.getAllCourses().add(c2);
		c2.getAllStudents().add(s1);
		c2.getAllStudents().add(s2);
		c2.getAllStudents().add(s3);
		c2.getAllStudents().add(s4);
		c2.getAllStudents().add(s5);
		c2.getAllStudents().add(s6);
		// 输出张三参加课程的信息,观察有多少课程,用什么你懂的
		System.out.println(s1);
		Iterator<Course> iter1 = s1.getAllCourses().iterator();
		while (iter1.hasNext()){
			System.out.println("\t|-" + iter1.next());
		}		
		// 输出《Java开发》课程参加的学生,观察有多少学生,用什么你懂的
		System.out.println(c1);
		Iterator<Student> iter2 = c1.getAllStudents().iterator();
		while (iter2.hasNext()){
			System.out.println("\t|-" + iter2.next());
		}
	}
}

程序运行结果:
学生姓名:张三; 年龄:18
        |-课程名称:《Java程序设计》
        |-课程名称:《Android手机开发》
课程名称:《Java程序设计》
        |-学生姓名:张三; 年龄:18

        |-学生姓名:李四; 年龄:19
        |-学生姓名:王五; 年龄:20

从以上程序中可以得出结论:
可以通过课程对象中的集合找到参加此课程的全部学生信息,也可以通过学生对象找到全部的课程信息。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值