Java类集学习(七)应用范例(多对多的关系)

上文讲到一对多的关系,定义类和各个属性,通过两个类中的属性保存彼此引用关系。

下面实现一个多对多的实例:一个学生可以选多门课程,一门课程可以有多个学生参加。

由此可见这是一个典型的多对多的关系,要定义学生类和课程类,学生的属性中开辟一个保存课程的list,课程类中开辟一个保存学生的list,通过无参构造把list实例化出来,有参构造把无参构造通过this();引进来带上,然后设置其他有参构造。

具体代码:

public class Student {
	private String name;
	private int age;
	private List<Course> allcourse;//声明一个占内存allCourse
	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> getAllcourse() {
		return allcourse;
	}
	public void setAllcourse(List<Course> allcourse) {
		this.allcourse = allcourse;
	}
	public Student(){
		this.allcourse  = new ArrayList<Course>();//实例化allCourse开辟堆内存,准备着存放课程集合
	}
	public Student(String name, int age){
		this();//调用无参构造,把开辟的allCourse带过来,设置name,age 属性
		this.name = name;
		this.age = age;
	}
	public String toString(){
		return "姓名:"+this.name+",年龄:"+this.age;
	}
}

public class Course {
	private String name;
	private int credit;//学分
	private List<Student> allStudent;//声明allStudent开辟栈内存
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public float getCredit() {
		return credit;
	}
	public void setCredit(int credit) {
		this.credit = credit;
	}
	public List<Student> getAllStudent() {
		return allStudent;
	}
	public void setAllStudent(List<Student> allStudent) {
		this.allStudent = allStudent;
	}
	public Course(){
		this.allStudent = new ArrayList<Student>();//实例化allStudent,开辟堆内存准备放学生集合
	}
	public Course(String name, int credit){
		this();//调用无参构造,把开辟的allStudent带过来,设置name,score属性
		this.name = name;
		this.credit = credit;
	}
	public String toString(){
		return "课程名称:"+this.name+",学分"+this.credit;
	}
}
测试:

public class TestDemo {
	public static void main(String[] args) {
		Student s1 = new Student("张三",20);
		Student s2 = new Student("李四",22);
		Student s3 = new Student("王五",23);
		Course c1 = new Course("计算机",4);
		Course c2 = new Course("英语",3);
		Course c3 = new Course("数学",4);
//		学生选课,学生中增加课程信息
		s1.getAllcourse().add(c1);
		s1.getAllcourse().add(c2);
		s2.getAllcourse().add(c3);
		s2.getAllcourse().add(c2);
		s2.getAllcourse().add(c1);
		s3.getAllcourse().add(c2);
//		课程中增加学生信息
		c1.getAllStudent().add(s2);
		c1.getAllStudent().add(s1);
		c2.getAllStudent().add(s3);
		c2.getAllStudent().add(s1);
		c3.getAllStudent().add(s2);
//		输出一门课程的信息
		System.out.println(c1);
//		利用foreach输出每个课程学生的信息
		for(Student students : c1.getAllStudent()){
			System.out.println(students);
		}
//		输出一个学生的信息
		System.out.println("\n"+s2);
//		利用Iterator迭代输出一个学生所有课程信息
		Iterator<Course> iter = s2.getAllcourse().iterator();
		while(iter.hasNext()){
			System.out.println(iter.next());
		}
	}
}
输出结果:

课程名称:计算机,学分4
姓名:李四,年龄:22
姓名:张三,年龄:20

姓名:李四,年龄:22
课程名称:数学,学分4
课程名称:英语,学分3
课程名称:计算机,学分4
Java类集的学习比较全部完成,主要常用的还是List接口(ArrayList)、Map(HashMap),以及集合的输出:Iterator、foreach,还有自定义的类中判断重复的方法:重写equals(),HashCode();若集合HashSet中要添加的元素是自定义的类,HashMap中K是自定义的类那么在自定义的类中就要重写这两个方法,用来去重。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值