基于HashMap的分挑存储例子

按班级统计学生的平均成绩时,为了减少工作量,计划使用计算机来做这样的统计工作。

下面给出一个类Score用来表示每条考试成绩。

package com.test;

/**
 * 学生成绩。
 */
class Score {
    /**
     * 学生姓名。
     */
    public String stdName;
    /**
     * 班级号。
     */
    public String classNumber;
    /**
     * 分数。
     */
    public int mark;
	public String getStdName() {
		return stdName;
	}
	public void setStdName(String stdName) {
		this.stdName = stdName;
	}
	public String getClassNumber() {
		return classNumber;
	}
	public void setClassNumber(String classNumber) {
		this.classNumber = classNumber;
	}
	public int getMark() {
		return mark;
	}
	public void setMark(int mark) {
		this.mark = mark;
	}
    
    
}


编写一个类ScoreStatistic,在类里实现以下方法:

package com.test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;


public class ScoreStatistic{
    public ScoreStatistic(){
    }
    public Map<String,Integer> statistic1(List<Score> scores){
		Map<String,Integer> classcountMap = new HashMap<String, Integer>();
		Map<String,Integer> classsumMap = new HashMap<String, Integer>();
		Iterator<Score> it = scores.iterator();
		while (it.hasNext()) {
			Score temp = it.next();
			String cn = temp.classNumber;
			int cm = temp.mark;
//			System.out.println(it.next().classNumber+"+"+it.next().mark);
			if(classcountMap.get(cn)!=null){System.out.println("1");
				classcountMap.put(cn, classcountMap.get(cn)+1);
				classsumMap.put(cn, classsumMap.get(cn)+cm);
			}else{
				classcountMap.put(cn, 1);
				classsumMap.put(cn,cm);
			}
			
		}
		Map<String, Integer> finalMap = new HashMap<String, Integer>();
		Iterator it1=classcountMap.keySet().iterator();    
		while(it1.hasNext()){    
		     String key;    
		     Integer value; 
		     Integer marksum;
		     key=it1.next().toString();    
		     value=classcountMap.get(key); 
		     marksum=classsumMap.get(key); System.out.println(value);
		     finalMap.put(key, marksum/value);
		     System.out.println(key+":"+marksum/value);    
		}   
		return classsumMap;
	}
    
    public Map<String,Integer> statistic(List<Score> scores){
		Map<String,Integer> map = new HashMap<String,Integer>();
		
		Map<String,ClassRoom> roomMap = new HashMap<String,ClassRoom>();
		int avg;
		ClassRoom room = null;
		for(Score score:scores){
			String classNumber = score.getClassNumber();
			int mark = score.getMark();
			room = roomMap.get(classNumber); 
			if(room == null){
				room = new ClassRoom(classNumber);
				roomMap.put(classNumber, room);
			}
			room.setTotal(room.getTotal()+mark);
			room.getList().add(score);
			//System.out.println(score.getClassNumber()+":"+avg);
		}
		
		Set<Map.Entry<String,ClassRoom>> set = roomMap.entrySet();
		Iterator<Map.Entry<String, ClassRoom>> it = set.iterator();
		while(it.hasNext()){
			Map.Entry<String, ClassRoom> entry = it.next();
			ClassRoom ro = entry.getValue();
			avg = ro.getTotal()/ro.getList().size();
			map.put(ro.getClassNumber(), avg);
			System.out.println(ro.getClassNumber()+":"+avg);
		}
		
		return map;
	}
    
    class ClassRoom{
    	/**
         * 班级号。
         */
        public String classNumber;
        
        /**
         * 总分
         */
        private int total;
        
        private List<Score> list;
        
        public ClassRoom(){
        	list = new ArrayList<Score>();
        }
        
        public ClassRoom(String classNumber){
        	this();
        	this.classNumber = classNumber;
        }

		public String getClassNumber() {
			return classNumber;
		}

		public void setClassNumber(String classNumber) {
			this.classNumber = classNumber;
		}

		public int getTotal() {
			return total;
		}

		public void setTotal(int total) {
			this.total = total;
		}

		public List<Score> getList() {
			return list;
		}

		public void setList(List<Score> list) {
			this.list = list;
		}
        
    }

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值