范例一——一对多关系
使用类集表示出一下关系:一个学校可以包含多个学生,一个学生只能属于一个学校,这就是一对多的关系.
School.java
import java.util.List ;
import java.util.ArrayList ;
public class School{ //定义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){ //设置name属性内容
this.name = name ;
}
public String getName(){ //取得name属性内容
return this.name;
}
public List<Student> getAllStudents(){ //取得全部学生
return this.allStudents ;
}
public String toString(){ //覆写toString()方法
return "学校名称:" + this.name ;
}
};
Student.java
public class Student{ //定义Student类
private String name ;
private int age ;
private School school; // 一个学生属于一个学校
public Student(String name,int age){
this.setName(name) ;
this.setAge(age) ;
}
public void setSchool(School school){ //设置所在学校
this.school = school ;
}
public School getSchool(){ //返回学生所在学校
return this.school ;
}
public void setName(String name){ //设置name属性内容
this.name = name ;
}
public void setAge(int age){ //设置age属性内容
this.age = age ;
}
public String getName(){ //返回name属性内容
return this.name;
}
public int getAge(){ //返回age属性内容
return this.age ;
}
public String toString(){ //覆写toString()方法
return "学生姓名:" + this.name + ";年龄:" + this.age ;
}
};
TestDemo.java
import java.util.Iterator ;
public class TestDemo{ //测试类
public static void main(String args[]){
School sch = new School("清华大学") ; // 实例化学校对象
Student s1 = new Student("张三",21) ; //实例化学生对象
Student s2 = new Student("李四",22) ;
Student s3 = new Student("王五",23) ;
sch.getAllStudents().add(s1) ; //在学校中加入学生
sch.getAllStudents().add(s2) ; //在学校中加入学生
sch.getAllStudents().add(s3) ; //在学校中加入学生
s1.setSchool(sch) ; //一个学生属于一个学校
s2.setSchool(sch) ; //一个学生属于一个学校
s3.setSchool(sch) ; //一个学生属于一个学校
System.out.println(sch) ; //输出学校信息
Iterator<Student> iter = sch.getAllStudents().iterator() ;
while(iter.hasNext()){ //利用iterator接口输出学校里面全部学生信息
System.out.println(" |- " + iter.next()) ;
}
}
};
范例二——多对多关系
例如:一个学生可以选多门课,每门课程可以有多个学生参加,这就是一个典型的多对多的关系。
Student.java
import java.util.List ;
import java.util.ArrayList ;
public class Student{ //定义学生类
private String name ;
private int age ;
private List<Course> allCourses ;
public Student(){ //定义无参构造
this.allCourses = new ArrayList<Course>() ; //实例化list集合
}
public Student(String name,int age){
this() ; //调用无参构造
this.name = name ; //设置name属性内容
this.age = age ; //设置age属性内容
}
public List<Course> getAllCourses(){ //取得全部课程信息
return this.allCourses ;
}
public void setName(String name){ //设置name属性
this.name = name ;
}
public void setAge(int age){ //设置age属性
this.age = age ;
}
public String getName(){ //取得name属性内容
return this.name ;
}
public int getAge(){ //取得age属性内容
return this.age ;
}
public String toString(){ //覆写toString()方法
return "学生姓名:" + this.name + ";年龄:" + this.age ;
}
};
Course.java
import java.util.List ;
import java.util.ArrayList ;
public class Course{ //定义课程类
private String name ;
private int credit ;
private List<Student> allStudents ;
public Course(){ //定义无参构造
this.allStudents = new ArrayList<Student>() ;
}
public Course(String name,int credit){
this() ; //调用无参构造
this.name = name ; //设置name属性内容
this.credit = credit ; //设置credit属性内容
}
public List<Student> getAllStudents(){ //返回全部学生
return this.allStudents ;
}
public void setName(String name){ //设置name属性
this.name = name ;
}
public void setCredit(int credit){ //设置credit属性
this.credit = credit ;
}
public String getName(){ //取得name属性
return this.name ;
}
public int getCredit(){ //取得credit属性
return this.credit ;
}
public String toString(){ //覆写toString()方法
return "课程名称:" + this.name + ";课程学分:" + this.credit ;
}
};
TestMore.java
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("钱八",24) ;
// 第一门课程有三个学生参加
c1.getAllStudents().add(s1) ;
c1.getAllStudents().add(s2) ;
c1.getAllStudents().add(s6) ;
s1.getAllCourses().add(c1) ;
s2.getAllCourses().add(c1) ;
s6.getAllCourses().add(c1) ;
// 第二门课程有六个学生参加
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() ; //利用iterator接口输出选c1这门课程的全部学生
while(iter1.hasNext()){
Student s = iter1.next() ;
System.out.println(" |- " + s) ;
}
// 通过学生找到学生参加的课程
System.out.println(s6) ; //输出学生信息
Iterator<Course> iter2 = s6.getAllCourses().iterator() ; //利用iterator接口输出s6这位学生所选的全部课程
while(iter2.hasNext()){
Course c = iter2.next() ;
System.out.println(" |- " + c) ;
}
}
};