使用集合表示:一对多关系
示例:通过集合表示:一个学校可以包含多个学生,一个学生只能属于一个学校。 分析:一个学校有多个学生,而学生的个数属于未知的,那么肯定无法用普通的对象数组表示,应该通过集合表示。 提供一个表示学生的实体类,在该类中提供一个学校实体类的对象school,该对象用来表示学生对象所属的学校。
class Student{
private String name;
private int age;
//getter/setter方法...
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
private School school ;//一个学生属于一个学校
public School getSchool() {
return school;
}
public void setSchool(School school) {
this.school = school;
}
}
提供一个表示学校的实体类,在该类中提供一个List类型的对象students,用来表示学校中所包含的学生。
class School{
private String name;
//getter/setter方法...
public School(String name) {
this.name = name;
students = new ArrayList();
}
@Override
public String toString() {
return "School [name=" + name + "]";
}
private List students ;//一个学校有多个学生
public List getStudents() {
return students;
}
}
测试类,实现一个学校包含多个学生,一个学生只能属于一个学校的功能。
public static void main(String[] args) throws Exception{
Student stu1 = new Student("zhangsan", 22);
Student stu2 = new Student("lisi", 33);
Student stu3 = new Student("wanger", 23);
School sch = new School("Xxxx");
//一个学校有多个学生
sch.getStudents().add(stu1);
sch.getStudents().add(stu2);
sch.getStudents().add(stu3);
//一个学生只属于一个学校
stu1.setSchool(sch);
stu2.setSchool(sch);
stu3.setSchool(sch);
//输出学校里面的所有学生
System.out.println(sch.getName()+" 学校的学生:");
Iterator iterator = sch.getStudents().iterator();
while (iterator.hasNext()) {
Student student = (Student) iterator.next();
System.out.println(student);
}
//输出学生所在的学校的名称
System.out.println("zhangsan所在的学校是:"+stu1.getSchool().getName());
}
运行程序,结果如下图所示。
示例:通过集合表示:一个学生可以选择多门课程,一门课程可以有多个学生参加。 首先定义两个类:学生信息类Student、课程信息类Course,在一个学生类中存在一个集合,保存全部的课程,而在课程类中也要存在一个集合,保存全部的学生,代码如下:
class Student{
private String name;
private int age;
//getter/setter方法...
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
public Student(String name, int age) {
courses = new ArrayList();
this.name = name;
this.age = age;
}
private List courses;
public List getCourses() {
return courses;
}
}
class Course{
private String name;
private int credit;//学分
//getter/setter方法...
public Course(String name, int credit) {
students = new ArrayList();
this.name = name;
this.credit = credit;
}
@Override
public String toString() {
return "Course [name=" + name + ", credit=" + credit + "]";
}
private List students ;
public List getStudents() {
return students;
}
}
测试类,实现一个学生可以选择多门课程,一门课程可以有多个学生参加的功能。
public class Demo16 {
public static void main(String[] args) throws Exception{
Student stu1 = new Student("zhangsan", 22);
Student stu2 = new Student("lisi", 33);
Student stu3 = new Student("wanger", 23);
Student stu4 = new Student("mazi", 43);
Course math = new Course("math", 8);
Course english = new Course("english", 8);
//math有三个学生参加
math.getStudents().add(stu1);
math.getStudents().add(stu3);
math.getStudents().add(stu4);
stu1.getCourses().add(math);
stu3.getCourses().add(math);
stu4.getCourses().add(math);
//english有两个学生参加
english.getStudents().add(stu2);
english.getStudents().add(stu4);
stu2.getCourses().add(english);
stu4.getCourses().add(english);
//输出一门课程的信息:观察一门课程有多少个学生参加
System.out.println("math课有如下学生参加");
Iterator iterator = math.getStudents().iterator();
while (iterator.hasNext()) {
Student student = (Student) iterator.next();
System.out.println("\t"+student);
}
//通过学生找到学生参加的课和
System.out.println("mazi 参加了如下课程:");
Iterator iterator2 = stu4.getCourses().iterator();
while (iterator2.hasNext()) {
Course course = (Course) iterator2.next();
System.out.println("\t"+course);
}
}
}
运行程序,结果如下图所示。