Java中Map的分拣存储思想--2
来源:互联网 发布:jdbcutils.java工具类 编辑:程序博客网 时间:2024/05/28 17:07
上面一个已经简单的介绍了Map的分拣存储思想,下面通过一个复杂的实例来进一步理解分拣存储思想,虽然在百度的时候,百度分拣存储思想都是尚学堂的,可能我还不知道这个在实际中怎么去用吧。
案例2:定义一个Student类,属性:name 姓名,no班号,score 成绩 现在将若干Student对象放入List,请统计出每个班级的总分和平均分
//在解题之前,先建立两个对象,Student1类和Classroom1类import java.util.ArrayList;import java.util.List;public class Classroom1 { private String no; private List<Student1> stu; private double total; public Classroom1() { stu = new ArrayList(); } public Classroom1(String no) { this(); this.no = no; } public Classroom1(String no, List<Student1> stu, double total) { super(); this.no = no; this.stu = stu; this.total = total; } public String getNo() { return no; } public void setNo(String no) { this.no = no; } public List<Student1> getStu() { return stu; } public void setStu(List<Student1> stu) { this.stu = stu; } public double getTotal() { return total; } public void setTotal(double total) { this.total = total; }}
//在解题之前,先建立两个对象,Student1类和Classroom1类public class Student1 { private String name; private String no; private double score; public Student1() { } public Student1(String name, String no, double score) { super(); this.name = name; this.no = no; this.score = score; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getNo() { return no; } public void setNo(String no) { this.no = no; } public double getScore() { return score; } public void setScore(double score) { this.score = score; } @Override public String toString() { return this.name; }}
//推荐使用Map<String,Classroom1>来建立分拣存储的思想,这里为了操作的方便性,//把学生对象的容器List放入Classroom1中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 TestAverage_2 { //将数据放入List中 public static List<Student1> exam(){ List<Student1> list = new ArrayList<>(); list.add(new Student1("老裴","a",85)); list.add(new Student1("裴兜兜","a",86)); list.add(new Student1("裴裴","a",89)); list.add(new Student1("高小三","b",80)); list.add(new Student1("高高","b",80)); return list; } //统计分析,也就是分拣存储,实现1:N的功能 public static Map<String,Classroom1> count(List<Student1> list){ Map<String,Classroom1> map = new HashMap<String,Classroom1>(); for(Student1 stu:list){ String no = stu.getNo(); double total = stu.getScore(); //查看有班级存在吗?如果没有的话就创建一个班级 Classroom1 room = map.get(no); if(!map.containsKey(no)){ room = new Classroom1(); map.put(no, room); } //已经有班级存在了,剩下的就是把学生放在相应班级中 room.getStu().add(stu); room.setTotal(room.getTotal()+total); } return map; } //计算班级的总分和平均分,也就是遍历Map public static void view(Map<String,Classroom1> map ){ Set<String> set = map.keySet(); Iterator<String> it = set.iterator(); while(it.hasNext()){ String no = it.next(); double total = map.get(no).getTotal(); double avrage = total/(map.get(no).getStu().size()); System.out.println(no+"--"+total+"--"+avrage); } } public static void main(String[] args) { List<Student1> stu = exam(); Map<String,Classroom1> map = count(stu); view(map); }}
import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import cn.feng.test3.Student;/** * 不推荐使用Map<String,List<Student>> 操作不方便,这里只是想试试 * 直接用List当做Map的value值 */public class TestAverage { //先将需要存储的对象放入List中 public static List<Student1> exam(){ List<Student1> list = new ArrayList<>(); list.add(new Student1("老裴","a",82)); list.add(new Student1("裴兜兜","a",82)); list.add(new Student1("裴裴","a",82)); list.add(new Student1("高小三","b",80)); list.add(new Student1("高高","b",80)); return list; } //实现分拣存储的思想,利用map实现1:N的映射, //其中Key-->String 班级编号;Value-->对应着List<Student> public static Map<String,List<Student1>> count(List<Student1> list){ Map<String,List<Student1>> map = new HashMap<>(); for(Student1 stu:list){ String no = stu.getNo(); if(!map.containsKey(no)){ List<Student1> value = new ArrayList<>(); map.put(no, value); value.add(stu); }else{ List<Student1> value = map.get(no); value.add(stu); } } return map; } public static void view(Map<String,List<Student1>> map){ double total = 0; Set keyset = map.keySet(); Iterator<String> it = keyset.iterator(); while(it.hasNext()){ String no = it.next(); List<Student1> list = map.get(no); System.out.println(no+list); for(int i=0;i<list.size();i++){ Student1 stu = list.get(i); total = total + stu.getScore(); } double average = total/list.size(); System.out.println(no+"-->"+total+"-->"+average); total = 0; } } public static void main(String[] args) { List<Student1> list = exam(); Map<String,List<Student1>> map = count(list); view(map); }}
阅读全文
0 0
- Java中Map的分拣存储思想--2
- Java中Map的分拣存储思想--1
- Java中面向对象分拣存储
- java 分拣存储
- Java分拣存储
- 分拣存储-利用HashMap统计句子中单词出现的次数
- Map实现分拣思路
- 分拣存储2-统计学生每个班级的总分和平均分
- HashMap分拣存储2:统计每个单词出现的次数(采用面向对象)
- java学习笔记之HashMap经典分拣存储
- HashMap分拣存储1:统计每个单词出现的次数
- JAVA学习笔记38——模拟实现Iterator+HashMap的“分拣”原理+“分拣”的应用
- java中运用HashMap进行分类分拣方法
- HashMap经典存储--分拣思路
- [分拣思想]——对象计数
- Tair存储引擎之一Leveldb中数据的存储思想
- 海量数据存储-bit map思想
- java编程思想11.10-map
- 《深入理解mybatis原理》 MyBatis的架构设计以及实例分析
- vim的简单配置
- Android--逐帧动画FrameAnimation
- tab
- 旅游项目(三)ssm实现文件上传下载实操
- Java中Map的分拣存储思想--2
- MVC模型的理解
- spring的循环依赖注入
- 聊聊3种内存溢出OOM(OutOfMemory)
- 一致性协议
- C语言初步-第35讲: 问题求解方法——迭代(另类求和)
- JAVA web获取客户端信息
- 1006. Couples
- Android 平时用到的第三方库,随时更新~