Java中面向对象的分拣存储

Student.java

package yzhou.map;

/**
 * 学生类
 *
 *
 * @author 洋
 *
 */
public class Student
{
    private String name;
    private String no;
    private double score;
    public Student()
    {

    }
    public Student(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;
    }

}

ClassRoom.java

package yzhou.map;

import java.util.ArrayList;
import java.util.List;

/**
 * 一个班级 多个学生
 * @author 洋
 *
 */
public class ClassRoom
{
    private String no;
    private List<Student> stuList;
    private double total;

    public ClassRoom()
    {
        stuList = new ArrayList<Student>();
    }

    public ClassRoom(String no)
    {
        this();
        this.no = no;
    }

    public ClassRoom(String no, List<Student> stuList, double total)
    {
        super();
        this.no = no;
        this.stuList = stuList;
        this.total = total;
    }

    public String getNo()
    {
        return no;
    }

    public void setNo(String no)
    {
        this.no = no;
    }

    public List<Student> getStuList()
    {
        return stuList;
    }

    public void setStuList(List<Student> stuList)
    {
        this.stuList = stuList;
    }

    public double getTotal()
    {
        return total;
    }

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

}

MapDemo03.java

package yzhou.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;

/**
 *
 * 面向对象+分解存储
 * @author 洋
 *
 */
public class MapDemo03
{
    public static void main(String[] args)
    {
        List<Student> stuList = exam();
        Map<String, ClassRoom> map = count(stuList);
        view(map);
    }

    /*
     * 查看每个班的总分和平均分    --》遍历map
     * */
    public static void view(Map<String, ClassRoom> map)
    {
        Set<String> keys = map.keySet();
        //获取迭代器对象
        Iterator<String> keysIt = keys.iterator();
        //先判断
        while(keysIt.hasNext()){
            //在获取
            String no = keysIt.next();
            ClassRoom room = map.get(no);
            //查看总分 计算平均分
            double total = room.getTotal();
            double avg = total/room.getStuList().size();
            System.out.println(no+"--->"+total+"-->"+avg);
        }

    }

    /*
     * 统计分析
     * */
    public static Map<String, ClassRoom> count(List<Student> list){
        Map<String, ClassRoom> map = new HashMap<String,ClassRoom>();
        //1.遍历
        for(Student stu:list)
        {
            //分拣查看是否存在, 该编号的班级
            String no = stu.getNo();
            double score = stu.getScore();
            //如果不存在 ,创建班级
            ClassRoom room  = map.get(no);
            if(null==room)
            {
                room = new ClassRoom(no);
                map.put(no, room);
            }

            //存在,放入学生
            room.getStuList().add(stu);
            room.setTotal(room.getTotal()+score);
        }
        return map;
    }

    /*
     * 模拟考试 测试数据到List 中
     * */

    public static List<Student> exam(){
        List<Student> list = new ArrayList<Student>();
        //存放学生成绩
        list.add(new Student("yzhou01","a",80));
        list.add(new Student("yzhou02","a",80));
        list.add(new Student("yzhou03","a",80));
        list.add(new Student("yzhou04","b",80));
        list.add(new Student("yzhou05","b",80));
        list.add(new Student("yzhou06","b",80));
        return list;
    };

}
时间: 2024-10-20 01:58:42

Java中面向对象的分拣存储的相关文章

关于Java中面向对象章节、IO 流中的重点基础知识。

一.面向对象的三大特征,以及作用. 答:面向对象的三大特征即,封装性.继承性.多态性. 其分别的作用为 : 封装作用:将数据封装起来,提高数据的安全性, 继承作用:提高代码的复用性,减少冗余代码. 多态性:应用程序不必对每个派生类进行方法调用,只需要对抽象基类处理即可,大大提高程序的复用性,可以提高可扩充性和可维护性. 二.多态中的向上转型 的作用以及向下转型使用的原因 答:在多态中向上转型的是作用是,父类的引用对象名指向子类的实体,也就是用一个抽象的基类去调用每一个派生子类,向下转型的原因为,

关于java中面向对象编程的一点点小感悟!!!

断断续续接触java已经有半年的时间,当然中间也有过很多事情,不得已而中断了java的学习.当初刚刚接触到java的时候,总是不能理解java的面向对象编程优点.平常生活中我们做事情的思维方式都是面向过程的,就拿最简单的我要上一个培训班来说: 第一步:当然得是网上.贴吧.朋友的口中来了解这个辅导班,以此来决定是否需要上这个辅导班. 第二步:当然就是当了解完成之后,对这个辅导班比较满意.自己就需要做准备来达到辅导班的要求,比如说学费.复习知识,准备参加辅导班规定的考试. 第三步:当然就是付诸实践,

Java中基本数据类型的存储方式和相关内存的处理方式(java程序员必读经典)

1.java是如何管理内存的 java的内存管理就是对象的分配和释放问题.(其中包括两部分) 分配:内存的分配是由程序完成的,程序员需要通过关键字new为每个对象申请内存空间(基本类型除外),所有的对象都在堆(Heap)中分配空间. 释放:对象的释放是由垃圾回收机制决定和执行的,这样做确实简化了程序员的工作.但同时,它也加重了JVM的工作.因为,GC为了能够正确释放对象,GC必须监控每一个对象的运行状态,包括对象的申请.引用.被引用.赋值等,GC都需要进行监控. 2.什么叫java的内存泄露 在

黑马程序员————java中面向对象的三大特性

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 面向对象的思想是将一切事物看出由属性,方法,构造器,代码块,内部类等五个方面构成,只要事物在这五个方面有相似之处就可以归为一类,类与类之间则是通过封装,继承,多态来体现. 首先说封装,很简单的思想,上帝创造我们出来没有给我们翅膀,那我们即

Java中面向对象的详解

1:成员变量和局部变量的区别(理解) (1)在类中的位置不同 成员变量:类中方法外 局部变量:方法定义中或者方法声明上 (2)在内存中的位置不同 成员变量:在堆中 局部变量:在栈中 (3)生命周期不同 成员变量:随着对象的创建而存在,随着对象的消失而消失 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失 (4)初始化值不同 成员变量:有默认值 局部变量:没有默认值,必须定义,赋值,然后才能使用 2:类作为形式参数的问题?(理解) (1)如果你看到一个方法需要的参数是一个类名,就应该知道这

java中面向对象的一些知识(二)

一. 封装的讲解 什么是封装?为什么要封装?怎么实现封装? 封装的目的是为了提高程序的安全性.封装就是把不想让第三者看的属性,方法隐藏起来. 封装的实现方法是: 1.修改属性的可见性,限制访问. 2.设置属性的读取方法. 3.在读取属性的方法中,添加堆属性读取的限制. package com.chen.test; public class Test9 { private int age; // 定义年龄 private String name; // 定义姓名 private double pr

java中面向对象的理解

面对对象就是: 把数据及对数据的操作方法放在一起,作为一个相互依存的整体--对象.对同类对象抽象出其共性,形成类.类中的大多数数据,只能用本类的方法进行处理.类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信.程序流程由用户在使用中决定.对象即为人对各种具体物体抽象后的一个概念,人们每天都要接触各种各样的对象,如手机就是一个对象.在面向对象的编程方式中,对象拥有多种特性,如手机有高度.宽度.厚度.颜色.重量等特性,这些特性被称为对象的属性.对象还有很多功能,如手机可以听音乐.

java中面向对象好处 Java中 接口作用

使用面向对象思想进行开发有以下优点:1.易维护采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的.2.质量高在设计时,可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量.3.效率高在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类.使用这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量.4.易扩展由于继承.封装.多态的特性,自然设计出高内聚.低耦合

Java中面向对象的三大特性之封装

封装 封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问. 要访问该类的代码和数据,必须通过严格的接口控制. 封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段. 适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性. 封装的优点 1. 良好的封装能够减少耦合. 2. 类内部的结构可以自由修改. 3. 可以对成员变量进行更精确的