类集的应用:
例如:以下一种关系:
一个人拥有多个Email地址;
分析:
完成此功能需要多少类:
人--->类
Email--->类
多个email怎么体现?
在Person类中加入一个存放Email对象的集合;
import java.util.*;
class Person{
private String name;
private int age;
private List<Email> allEmails;
public Person(String name,int age){
this.allEmails=new ArrayList();
this.name=name;
this.age=age;
}
public void setName(String name){
this.name=name;
}
public void setAge(int age){
this.age=age;
}
public void setAllEmails(List<Email> allEmails){
this.allEmails=allEmails;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
public List<Email> getAllEmails(){
return this.allEmails;
}
public String toString(){
return "姓名:"+this.name+",年龄:"+this.age;
}
}
class Email{
private String url;
private String userName;
private String flag;
public Email(String url,String userName,String flag){
this.url=url;
this.userName=userName;
this.flag=flag;
}
public void setUrl(String url){
this.url=url;
}
public void setUserName(String userName){
this.userName=userName;
}
public void setFlag(String flag){
this.flag=flag;
}
public String getUrl(){
return this.url;
}
public String getUserName(){
return this.userName;
}
public String getFlag(){
return this.flag;
}
public String toString(){
return "网站:"+this.url+",email名称:"+this.userName+this.flag;
}
}
public class Demo{
public static void main(String args[]){
Person p=new Person("lid",20);
Email e1=new Email("www.163.com","lid1","@163");
Email e2=new Email("www.163.com","lid2","@163");
Email e3=new Email("www.163.com","lid3","@163");
p.getAllEmails().add(e1);
p.getAllEmails().add(e2);
p.getAllEmails().add(e3);
//一个人拥有3个emails地址
//通过输出体现
List<Email> all=p.getAllEmails();
Iterator iter=all.iterator();
while(iter.hasNext()){
Email e=(Email)iter.next();
System.out.println(e);
}
}
}
一对多的关系:一个人拥有多个email地址,是数据库中的一对多
多对多的关系:
一个学生可以选多门课程,一个课程可同时被多名学生选择;
import java.util.*;
class Student{
private String name;
private List<Subjects> allSubjects;
public Student(){
this.allSubjects=new ArrayList();
}
public Student(String name){
this();
this.setName(name);
}
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
public List<Subjects> getAllSubjects(){
return this.allSubjects;
}
public String toString(){
return "学生姓名:"+this.name;
}
}
class Subjects{
private String name;
private List<Student> allStudent;
public Subjects(){
this.allStudent=new ArrayList();
}
public Subjects(String name){
this();
this.setName(name);
}
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
public List<Student> getAllStudent(){
return this.allStudent;
}
public String toString(){
return "课程:"+this.name;
}
}
public class Demo{
//打印该学生选的所有课程
public static void print(Student s){
System.out.println("*"+s+":的课程信息---");
Iterator iter=s.getAllSubjects().iterator();
while(iter.hasNext()){
System.out.println(" |-"+iter.next());
}
}
//打印选择该课程的所有学生
public static void print(Subjects s){
System.out.println("*"+s+":的学生信息---");
Iterator iter=s.getAllStudent().iterator();
while(iter.hasNext()){
System.out.println(" |-"+iter.next());
}
}
public static void main(String args[]){
Student s1=new Student("张三");
Student s2=new Student("李四");
Student s3=new Student("王五");
Student s4=new Student("赵六");
Student s5=new Student("孙七");
Subjects su1=new Subjects("C++");
Subjects su2=new Subjects("JAVA");
Subjects su3=new Subjects("ANDRIOD");
//一门课程被多门学生选
su1.getAllStudent().add(s1);
su1.getAllStudent().add(s2);
su1.getAllStudent().add(s3);
su2.getAllStudent().add(s2);
su2.getAllStudent().add(s4);
su3.getAllStudent().add(s5);
//一个学生选择多门课程
s1.getAllSubjects().add(su1);
s2.getAllSubjects().add(su1);
s2.getAllSubjects().add(su2);
s3.getAllSubjects().add(su1);
s4.getAllSubjects().add(su2);
s5.getAllSubjects().add(su3);
print(s1);
print(s2);
print(s3);
print(s4);
print(s5);
System.out.println("===================================");
print(su1);
print(su2);
print(su3);
}
}