文章标题

来源:互联网 发布:200w数据查20w 编辑:程序博客网 时间:2024/06/05 14:26

分拣存储(Java)

应用场景 :

  • 将一堆数据依据某一个属性进行分类存储的情况 .

例子 :

  • C语言中统计一串英文字母当中出现的字母的个数 , 并输出

    代码如下,就是体现了分拣存储的概念

#include <stdio.h>#include <string.h>  int main(){    char * array = "adhasjkd , hajsdasjdasdasfdafasd";    int result[128]={0};      int i;    //统计    for(i=0;i<strlen(array);i++){       result[array[i]]++;    }    //输出    for(i=0;i<127;i++){      if(result[i]!=0){         printf("%c ---> %d\n",i,result[i]);      }    }    return 0;  }

面向对象中使用分拣存储

在Java中使用就可以使用容器来完成
例子如下 :

有一份学生信息表 , 表中学生有班级之分 , 有姓名和分数属性
现将学生按照班级存储 , 并且输出各个班的平均分 和 班级名单

显然上述例子需要使用分拣存储 , 分类的依据是班级的编号

代码如下

实体类 :

package club.dohacker.entity;public class Letter {    private String key;    private int count;    public Letter(String key){        this.key = key;    }    public String getKey() {        return key;    }    public void setKey(String key) {        this.key = key;    }    public int getCount() {        return count;    }    public void setCount(int count) {        this.count = count;    }}
package club.dohacker.entity;public class Student {   private int num;   private String name;   private double fenshu;public Student(int num,String name,double fenshu){    this.num = num;    this.name = name;    this.fenshu  = fenshu;}public int getNum() {    return num;}public void setNum(int num) {    this.num = num;}public String getName() {    return name;}public void setName(String name) {    this.name = name;}public double getFenshu() {    return fenshu;}public void setFenshu(double fenshu) {    this.fenshu = fenshu;}}

测试代码如下 :

package club.dohacker.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;import club.dohacker.entity.Class;import club.dohacker.entity.Student;public class Test2 {   public static void main(String[] args) {      List<Student> list = new ArrayList<Student>();      list.add(new Student(1,"张三",90.0));      list.add(new Student(1,"李四",90.0));      list.add(new Student(2,"王五",90.0));      list.add(new Student(1,"陈六",90.0));      list.add(new Student(3,"赵七",90.0));      Map<Integer,Class> map = new HashMap<Integer,Class>();      //开始分拣存储      for(int i=0;i<list.size();i++){          //判断其中是否包含班级信息          if(map.get(list.get(i).getNum()) != null){                   Class temp = map.get(list.get(i).getNum());                   temp.setCount(temp.getCount()+1);                   temp.setZongfen(temp.getZongfen()+list.get(i).getFenshu());                   List<Student> list_temp = temp.getList();                   list_temp.add(list.get(i));            }else{               //创建班级                   Class temp = new Class(list.get(i).getNum());                   temp.setNum(list.get(i).getNum());                   temp.setCount(temp.getCount()+1);                   temp.setZongfen(temp.getZongfen()+list.get(i).getFenshu());                   List<Student> list_temp = temp.getList();                   list_temp.add(list.get(i));                   map.put(list.get(i).getNum(), temp);            }          }      //输出班级的信息      Set<Integer> set = map.keySet();      Iterator<Integer> ite = set.iterator();      while(ite.hasNext()){          Class c = map.get(ite.next());          System.out.println("班级"+c.getNum()+"总人数 :"+c.getCount()+"班级总分 :"+c.getZongfen());          for(Student stu : c.getList()){              System.out.println(stu.getName()+"  "+stu.getFenshu());          }        //输出平均分         System.out.println("班级平均分 : "+c.getZongfen()/c.getCount());         System.out.println("========================================");      }   }}
原创粉丝点击