Map实现一个键对应多个值
方法:将多个值放在一个List中,然后把该List放在Map键所对应的值中。
原因:Map有点儿类似于Set,当中放的元素是不重复的,所以当放了第一个键所对应的值之后,又想放第二个还是这个键对应的另外一个值,就会覆盖掉 之前的值。
例子:定义一个Student类,属性:name 姓名,classNumber 班号,score 成绩 要求:通过班级号得到该班级所有学生的总分和班级平均分
Student类里面的代码比较简单就不发出来,重点看看Clazz类(班级)
//班级类 public class Clazz { private int classNum; //班级号 private ArrayList list = new ArrayList(); //每个班配一个集合来放学生 //构造器 public Clazz(int n){ super(); classNum = n; } //添加学生 public void addStudent(Student s){ list.add(s); } //得到学生序列 public ArrayList getStudentList(){ return list; } //班上学生总分 public int getSumScores(){ int sum = 0; for (Object object : list) { Student s = (Student)object; sum+=s.getScore(); } return sum; } //班上学生平均分 public double getAverageScore(){ double average = 0; average = getSumScores()*1.0/list.size(); return average; } //打印班级成绩信息 public void printClassScore(int classNumber){ HashMap map = new HashMap(); //存入到map中 key为classNumber , values为班上学生总分 map.put(classNumber,getSumScores()); //输出 System.out.println(classNumber+"班的总分为:"+map.get(classNumber)+" 平均分为:"+getAverageScore()); } }
然后再在主类里面测试就行
public class Test6 { public static void main(String[] args) { //创建相应班级 Clazz c1 = new Clazz(1); Clazz c2 = new Clazz(2); //创建学生 Student s1 = new Student("一班一号", 1, 60); //姓名 班级 个人成绩 Student s2 = new Student("一班二号", 1, 70); Student s3 = new Student("一班三号", 1, 80); Student s4 = new Student("二班四号", 2, 80); Student s5 = new Student("二班五号", 2, 80); Student s6 = new Student("二班六号", 2, 80); //添加学生到相应班级 c1.addStudent(s1); c1.addStudent(s2); c1.addStudent(s3); c2.addStudent(s4); c2.addStudent(s5); c2.addStudent(s6); //输出 c1.printClassScore(1); c2.printClassScore(2); } }
最近每天锻炼身体,精神也特别不错,那天看到我师兄(我们专业算是很牛逼的人)好沧桑啊,头发都快白万了,心里边儿瞬间就哽咽了,爱工作、爱文档、爱代码、更要爱生活,加油!