JavaSE集合应用高级

使用集合表示:一对多关系

示例:通过集合表示:一个学校可以包含多个学生,一个学生只能属于一个学校。
分析:一个学校有多个学生,而学生的个数属于未知的,那么肯定无法用普通的对象数组表示,应该通过集合表示。
提供一个表示学生的实体类,在该类中提供一个学校实体类的对象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<Student>();
	}
	@Override
	public String toString() {
		return "School [name=" + name + "]";
	}
	private List<Student> students ;//一个学校有多个学生
	public List<Student> 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<Student> 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<Course>();
		this.name = name;
		this.age = age;
	}
	private List<Course> courses;
	public List<Course> getCourses() {
		return courses;
	}
}
class Course{
	private String name;
	private int credit;//学分
//getter/setter方法...
	public Course(String name, int credit) {
		students = new ArrayList<Student>();
		this.name = name;
		this.credit = credit;
	}
	@Override
	public String toString() {
		return "Course [name=" + name + ", credit=" + credit + "]";
	}
	private List<Student> students ;
	public List<Student> 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<Student> iterator = math.getStudents().iterator();
		while (iterator.hasNext()) {
			Student student = (Student) iterator.next();
			System.out.println("\t"+student);			
		}
		//通过学生找到学生参加的课和
		System.out.println("mazi 参加了如下课程:");
		Iterator<Course> iterator2 = stu4.getCourses().iterator();
		while (iterator2.hasNext()) {
			Course course = (Course) iterator2.next();
			System.out.println("\t"+course);			
		}
	}
}

运行程序,结果如下图所示。
在这里插入图片描述

发布了460 篇原创文章 · 获赞 812 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/lianghecai52171314/article/details/105452795