這篇博客主要是在集合的基礎上學習一下對象的一對多關系與對象的多對一關系。
1.對象的一對多關系
我們拿古代皇帝與后宮佳麗來舉一個例子,皇帝只有一個,而佳麗卻有三千之多。皇帝與后宮佳麗之間的關系就是一對多的關系,同時,后宮佳麗與皇帝之間的關系是多對一的關系。
Demo:
public class Emperor { PRivate String name; private String title; //一對多關系 private Set<Concubine> concubines; public Set<Concubine> getConcubines() { return concubines; } public void setConcubines(Set<Concubine> concubines) { this.concubines=concubines; } public Emperor(String title, String name) { this.title = title; this.name = name; } public String getName() { return name; } public String getTitle() { return title; } public void setName(String name) { this.name = name; } public void setTitle(String title) { this.title = title; } @Override public String toString() { return "Emperor{" + "name='" + name + '/'' + ", title='" + title + '/'' + '}'; }}public class Concubine { private String name; private String jobs; // private Emperor emperor; public Emperor getEmperor() { return emperor; } //多對一關系 public void setEmperor(Emperor emperor) { this.emperor = emperor; } public Concubine(String name, String jobs) { this.name = name; this.jobs = jobs; } public String getName() { return name; } public String getJobs() { return jobs; } public void setName(String name) { this.name = name; } public void setJobs(String jobs) { this.jobs = jobs; } @Override public String toString() { return "Concubine{" + "name='" + name + '/'' + ", jobs='" + jobs + '/'' + '}'; }}public class OneToManyDemo { public static void main(String args[]) { Emperor e =new Emperor("威哥","威武"); Concubine c1=new Concubine("小白","答應"); Concubine c2=new Concubine("小寶","貴人"); Concubine c3=new Concubine("軒","皇貴妃"); /** * 關聯關系 */ //獲得concubines集合 e.setConcubines(new HashSet<Concubine>()); //向集合中添加元素 //相互添加進行設置,皇帝對象里面添加妃子,妃子設置皇帝 e.getConcubines().add(c1); e.getConcubines().add(c2); e.getConcubines().add(c3); c1.setEmperor(e); c2.setEmperor(e); c2.setEmperor(e); //通過皇帝得到妃子 System.out.println("皇帝:"+e.getName()+"年號:"+e.getTitle()); Set<Concubine> set=e.getConcubines(); for (Concubine concubine:set) { System.out.println(concubine); } }}其實仔細看一下代碼的實現過程也不難,就在皇帝類中關聯妃子的對象,并實現妃子對象的獲得與修改的方法,同樣在妃子類中關聯皇帝的對象,并添加對象的get與set方法。在實現類中,使用皇帝的對象調用妃子的set方法為皇帝綁定多個妃子對象,使用妃子對象的調用皇帝的set的方法,妃子綁定皇帝。
2.對象的多對多關系
我們再舉一個生活中的例子,老師與學生的例子,老師教多個學生,學生被多個老師教,老師與同學之間便形成了多對多的關系。
ublic class Teacher { private String name; private int age; //表示多對多關系 private ArrayList<Student> students=new ArrayList<Student>(); public ArrayList<Student> getStudents() { return students; } public void setStudents(ArrayList<Student> students) { this.students = students; } public String getName() { return name; } public int getAge() { return age; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public Teacher(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Teacher{" + "name='" + name + '/'' + ", age=" + age + '}'; }}public class Student { private String name; private int age; //表示多對多關系 private ArrayList<Teacher> teachers =new ArrayList<Teacher>(); public ArrayList<Teacher> getTeachers() { return teachers; } public void setTeachers(ArrayList<Teacher> teachers) { this.teachers = teachers; } public Student(String name, int age) { this.name = name; this.age = age; } public int getAge() { return age; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Student{" + "name='" + name + '/'' + ", age=" + age + '}'; }}public class ManyToManyDemo { public static void main(String args[]) { Teacher t1 =new Teacher("白老師",18); Teacher t2=new Teacher("蒼老師",28); Student s1 =new Student("小白",15); Student s2=new Student("小黑",19); //通過get,set方法添加元素,實現多對多 t1.getStudents().add(s1); t1.getStudents().add(s2); t2.getStudents().add(s1); t2.getStudents().add(s2); s1.getTeachers().add(t1); s1.getTeachers().add(t2); s2.getTeachers().add(t1); s2.getTeachers().add(t2); }}實現的原理與對象的多對一的實現原理是差不多的,不過就是在另外一個類中也是聲明對象的集合,而不只是單個對象。
新聞熱點
疑難解答