码迷,mamicode.com
首页 > 编程语言 > 详细

数组、集合、泛型解析——【新生入学系统】

时间:2015-03-08 18:51:58      阅读:421      评论:0      收藏:0      [点我收藏+]

标签:泛型   集合   容器   数组   

一、概念(from 百科)

数组:把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。

集合集合是一组可变数量的数据项(可为0)的组合,这些数据项可能共享某些特征,需要以某种操作方式一起进行操作。

泛型:在程序编码中一些包含参数的类型,也就是说泛型的参数只可以代表类,不能代表个别对象。

  
二、进化史

 技术分享


  开始用内存中的一个位置映射一个值,用“变量”来使用这个值。进一步发展成,用变量来引用一组值,数组诞生。后来有了集合,它是更强的的数组,依赖object类。存入集合要经历装箱,转换成Object类,拿出的时候再拆箱成之前的类型。在元素量大的时候,会导致性能下降。由于我们使用同一类型更方便操作,后来就产生了泛型,它可以把里面的元素转换成特定的类型,减少了拆装箱带来的困扰。

 

三、C#对比

 

C#集合包含

名称

区别

System.Array

数组

长度一定,不可增删改查

System.Collection

非泛型集合

ArrayList可动态的调整大小,具有添加、移除的功能

 包括ArrayList  BitArray  Hastable  Queue  Stack  SortedList 。

所有的集合都要实现一个接口 IEnumerable

System.Collection.Generic

泛型集合

相当于免去转换成Object的集合。

提供了更高的类型安全和效率。

 

 

四、高校云平台中泛型集合的应用


新生中WCF层中的一个小demo:

<span style="font-family:KaiTi_GB2312;font-size:18px;">        /// <summary>
        /// 根据学院查询这个学院的学生个数
        /// </summary>
        /// <param name="freshDepartment">学院的实体,学院名称</param>
        /// <returns></returns>       

        public List<FreshStudentReportContracts> QueryAllFreshReport()
        {

            //实例化学生报表实体类型的泛型集合
            List<FreshStudentReportContracts> listStudentReport = new List<FreshStudentReportContracts>();
            
            //实例化B层学生信息
            FreshStudentEntityService en = new FreshStudentEntityService();

            //通过调用B层的方法实现IList的接口
            //创建一个基于IList的接口,List是创建一个List的实例
            IList<ITOO.FreshService.Model.FreshStudentEntity> studentCollections = en.LoadEnities().ToList();
            
            //定义B层查询专业信息的方法
            FreshDepartmentEntiyService QueryAllDepartments = new FreshDepartmentEntiyService();
           
            //调用B层的方法
            var listDepartment = QueryAllDepartments.QueryDepartment();
            //获得所有的学生实体

            //定义一个宿舍实体FreshDep,从listDepartment中取实体属性进行赋值
            foreach (FreshDepartmentEntiy FreshDep in listDepartment)
            {
                //定义数据契约
                FreshStudentReportContracts fsrc = new FreshStudentReportContracts();

                //把实体的值赋给数据契约

                fsrc.DepartmentName = FreshDep.DepartmentName;
                //查询录取学生总人数
                fsrc.EnterStudentNumber = studentCollections.Where(s => s.FreshDepartmentName == FreshDep.DepartmentName).ToList().Count();
                //查询报道学生总人数
                fsrc.RegisterStudentNumber = studentCollections.Where(e => e.IsCheckIn == 1 && e.FreshDepartmentName == FreshDep.DepartmentName).ToList().Count();
                //查询报道男生总人数
                fsrc.RegisterBoysNumber = studentCollections.Where(e => e.IsCheckIn == 1 && e.Sex == 0 && e.FreshDepartmentName == FreshDep.DepartmentName).ToList().Count();
                //查询报道女生总人数
                fsrc.RegisterGrilsNumber = studentCollections.Where(e => e.IsCheckIn == 1 && e.Sex == 1 && e.FreshDepartmentName == FreshDep.DepartmentName).ToList().Count();
               
                //把数据契约值添加到学生报表数据契约中

                listStudentReport.Add(fsrc);
            }
          
            return listStudentReport;//返回学生报表数据契约中的数据


        }</span>

    泛型集合,我的理解是List<>就是集合,尖括号里面的东西就是指定好的泛泛的那个类型。

     在这段代码中,首先定义了一个方法:根据学院查询这个学院的学生个数的方法——QueryAllFreshReport,把查询的结果放到List<FreshStudentReportContracts>这个泛型集合里面。这个泛型指定的类型是FreshStudentReportContracts.

  在这个集合里面,可以添加该数据契约里面含有字段(DepartmentName,EnterStudentNuber等)对应的属性值.

  之前做机房的时候,泛型集合里面存放的是实体。新生项目中,存放的不仅仅可以是model实体,也可以是数据契约实体,这也算是一种进步吧。


五、总结

  无论是变量、数组、集合、泛型都是一个容器,能盛放数据,只是“瓶口”不太一样。 从盛放一个数据,同种类型的多个数据,到不同种类的多个数据,容器的发展更加的人性化,人类面向对象的思想也在不断的提高。相信未来在学习Java的时候,对容器的理解会更加的深入。

  


数组、集合、泛型解析——【新生入学系统】

标签:泛型   集合   容器   数组   

原文地址:http://blog.csdn.net/wangmei4968/article/details/44134341

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!