第十五天总结:
1.Map的扩展
通过学习HashMap的扩展自己动手做一个TreeMap集合的嵌套
/*
需求:定义一个容器,存储某小学所有学生的期末考试成绩。
1.元素有年级、班级、学生、成绩
2.年级按照从高到低的顺序存储,班级按照从低到高的顺序存储
学生按照成绩从高到低存储。
思路:1.首先定义一个年级的TreeMap集合,键是年级号,值是班级集合
2.班级集合也是TreeMap结构,它的键是班级号,值是学生对象
3.学生对象存放在TreeSet集合中。
*/
import java.util.*;
class GreadTreeMap<G,T,S>
{
private Map<G,Map<T,Set<S>>> greadMap;
GreadTreeMap()
{
greadMap=new TreeMap<G,Map<T,Set<S>>>();
}
/**
@prama gread 年级;
@parma team 班级;
@parma stu 学生;
*/
public void newPut(G gread,T team,S stu)
{
Map<T,Set<S>> teamMap=greadMap.get(gread);
if (teamMap==null)
{
teamMap=new TreeMap<T,Set<S>>();
greadMap.put(gread,teamMap);
}
Set<S> stuSet=teamMap.get(team);
if (stuSet==null)
{
stuSet=new TreeSet<S>();
teamMap.put(team,stuSet);
}
stuSet.add(stu);
}
/**
*获得某个班的成绩表;
@prama gread 年级;
@parma team 班级;
@return TreeSet<S> 成绩表。
*/
public Set<S> getMarkList(G gread,T team)
{
return greadMap.get(gread).get(team);
}
/**
*获得班级集合
@prama gread 年级;
@return Map<T,Set<S>> 班级集合;
*/
public Map<T,Set<S>> getTeam(G gread)
{
return greadMap.get(gread);
}
/**
*获得年级键集合
@return Set<G> 年级键集合。
*/
public Set<G> greadKeySet()
{
return greadMap.keySet();
}
/**
*获得年级集合键值关系
@return Set<Map.Entry<G,Map<T,Set<S>>>> 年级键值关系
*/
public Set<Map.Entry<G,Map<T,Set<S>>>> greadEntrySet()
{
return greadMap.entrySet();
}
/**
*获得班级键集合
@prama gread 年级;
@return Set<T> 班级键集合。
*/
public Set<T> teamKeySet(G gread)
{
return getTeam(gread).keySet();
}
/**
*获得班级集合的键值关系
@prama gread 年级
@return Set<Map.Entry<T,Set<S>>> 班级键值关系;
*/
public Set<Map.Entry<T,Set<S>>> teamEntrySet(G gread)
{
return getTeam(gread).entrySet();
}
/**
*获得年级的数量
@return int 年级的数量
*/
public int greadSize()
{
return greadMap.size();
}
/**
*获得某年级的班级数量
@prama 年级;
@return int 班级的数量。
*/
public int teamSize(G gread)
{
return getTeam(gread).size();
}
/**
*获得某班参加考试的学生数量
@prama gread 年级;2
@prama team 班级;
@return int 某班参加考试学生的数量;
*/
public int stuSize(G gread,T team)
{
return getMarkList(gread,team).size();
}
/**
*获得该学校的班级数量
@return int 所有班级数量
*/
public int getTeamSum()
{
int sum=0;
for(G g:greadKeySet())
{
sum=sum+teamSize(g);
}
return sum;
}
/**
*获得该学校所有参加考试的学生的数量
@return int 所有参加考试的学生的数量
*/
public int getStuSum()
{
int sum=0;
for (G gread:greadKeySet())
{
for (T team:teamKeySet(gread) )
{
sum=sum+stuSize(gread,team);
}
}
return sum;
}
/**
返回GreadTreeMap的字符串表现形式
@return String GreadTreeMap的字符串表现形式。
*/
public String toString()
{
StringBuilder sb=new StringBuilder();
sb.append("/t"+"/t"+" 镇中心小学期末成绩一览表"+"/n");
sb.append("------------------------------------------------------------"+"/n");
sb.append(" "+"年级"+"/t"+"班级"+"/t"+" 学号"+"/t"+" 姓名"+"/t"+"语文"+"/t"+"英语"+"/t"+"数学"+"/t"+"总分"+"/n");
sb.append("------------------------------------------------------------"+"/n");
for (G gread:greadKeySet() )
{
for(T team:teamKeySet(gread))
{
for (S stu:getMarkList(gread,team))
{
sb.append(gread.toString()+"/t"+team.toString()+"/t"+stu.toString()+"/n");
}
sb.append("------------------------------------------------------------"+"/n");
}
}
return sb.toString();
}
/**
*返回某个班级的成绩表
@prama gread 年级
@prama team 班级
@return String stuSet的字符串表现形式
*/
public String stuToString(G gread,T team)
{
StringBuilder sb=new StringBuilder();
sb.append(" "+"镇中心小学"+gread.toString()+team.toString()+"期末成绩一览表"+"/n");
sb.append("--------------------------------------------"+"/n");
sb.append(" 学号"+"/t"+" 姓名"+"/t"+"语文"+"/t"+"英语"+"/t"+"数学"+"/t"+"总分"+"/n");
sb.append("--------------------------------------------"+"/n");
for (S stu:getMarkList(gread,team) )
{
sb.append(stu.toString()+"/n");
}
return sb.toString();
}
}
class Gread implements Comparable
{
private String name;
private int ID;
Gread(String name,int ID)
{
this.name=name;
this.ID=ID;
}
public String getGreadName()
{
return name;
}
public int getGreadID()
{
return ID;
}
public int compareTo(Object obj)
{
Gread gread2=(Gread)obj;
if (this.getGreadID()>gread2.getGreadID())
return 1;
else if(this.getGreadID()==gread2.getGreadID())
return 0;
return -1;
}
public String toString()
{
return this.getGreadName();
}
}
class Team implements Comparable
{
private String name;
private int ID;
Team(String name,int ID)
{
this.name=name;
this.ID=ID;
}
public String getTeamName()
{
return name;
}
public int getTeamID()
{
return ID;
}
public int compareTo(Object obj)
{
Team team2=(Team)obj;
if (this.getTeamID()>team2.getTeamID())
return 1;
else if(this.getTeamID()==team2.getTeamID())
return 0;
return -1;
}
public String toString()
{
return this.getTeamName();
}
}
class Student implements Comparable
{
private String name;
private String ID;
private int Chi,Eng,Mat;
private int mark;
Student(String name,String ID)
{
this.name=name;
this.ID=ID;
}
Student(String name,String ID,int Chi,int Eng,int Mat)
{
this.name=name;
this.ID=ID;
this.Chi=Chi;
this.Eng=Eng;
this.Mat=Mat;
this.mark=Chi+Eng+Mat;
}
public void setChi(int Chi,int Eng,int Mat)
{
this.Chi=Chi;
this.Eng=Eng;
this.Mat=Mat;
this.mark=Chi+Eng+Mat;
}
public String getStuName()
{
return name;
}
public String getStuID()
{
return ID;
}
public int getChi()
{
return Chi;
}
public int getEng()
{
return Eng;
}
public int getMat()
{
return Mat;
}
public int getMark()
{
return mark;
}
public int compareTo(Object obj)
{
Student stu2=(Student)obj;
if (this.getMark()>stu2.getMark())
return -1;
else if(this.getMark()==stu2.getMark())
return this.getStuID().compareTo(stu2.getStuID());
return 1;
}
public String toString()
{
return this.getStuID()+"/t"+this.getStuName()+"/t"+this.getChi()+"/t"+this.getEng()+"/t"+this.getMat()+"/t"+this.getMark();
}
}
----------------------------------------------------------------------------
测试上面的程序
*/
import java.util.*;
class greadTreeMapDemo
{
public static void main(String[] args)
{
GreadTreeMap<Gread,Team,Student> gt=new GreadTreeMap<Gread,Team,Student>();
gt.newPut(new Gread("一年级",1),new Team("二班",2),new Student("张小毛","G10201",80,79,92));
gt.newPut(new Gread("一年级",1),new Team("三班",3),new Student("李四","G10307",60,77,80));
gt.newPut(new Gread("一年级",1),new Team("二班",2),new Student("王小明","G10209",12,100,92));
gt.newPut(new Gread("一年级",1),new Team("二班",2),new Student("马小五","G10210",40,20,30));
gt.newPut(new Gread("二年级",2),new Team("二班",2),new Student("张小毛","G20201",80,79,92));
gt.newPut(new Gread("二年级",2),new Team("二班",2),new Student("周晓七","G20204",40,100,92));
gt.newPut(new Gread("三年级",3),new Team("六班",6),new Student("王慧","G30610",90,30,100));
gt.newPut(new Gread("三年级",3),new Team("一班",1),new Student("程九","G30102",70,60,20));
gt.newPut(new Gread("五年级",5),new Team("十班",10),new Student("张小毛","G51029",90,90,90));
gt.newPut(new Gread("三年级",3),new Team("六班",6),new Student("郑小小","G30620",100,100,100));
gt.newPut(new Gread("三年级",3),new Team("六班",6),new Student("郑小小","G30620",100,100,100));
gt.newPut(new Gread("一年级",1),new Team("二班",2),new Student("孙小猴","G10298",28,78,72));
gt.newPut(new Gread("一年级",1),new Team("三班",3),new Student("王大大","G10307",20,100,100));
gt.newPut(new Gread("一年级",1),new Team("二班",2),new Student("陈丫","G10228",92,70,98));
gt.newPut(new Gread("一年级",1),new Team("二班",2),new Student("马小五","G10211",70,80,80));
System.out.println(gt.toString());
System.out.println(gt.stuToString(new Gread("一年级",1),new Team("二班",2)));
}
}
2.集合工具类
String[] arr=al.toArray(new String[al.size()]);集合转数组,在往toArray中传递指定类型的数组时,最好长度指定为集合的长度。
Arrays专门用于操作数组的工具类
这个类里的方法全部是静态的。
List<T> list=Arrays.asList(T[] arr)数组变集合
数组变集合需要注意的是,数组长度是固定的,所以必成集合后不可以对其进行增删,否则运行出现不支持操作异常。
数组变集合其实不是形式上的变化,这是思想上的变化,我们可以用集合的思想来操作数组中的元素。
Collections这个类是操作集合的