数组:把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。
集合:集合是一组可变数量的数据项(可为0)的组合,这些数据项可能共享某些特征,需要以某种操作方式一起进行操作。
泛型:在程序编码中一些包含参数的类型,也就是说泛型的参数只可以代表类,不能代表个别对象。
开始用内存中的一个位置映射一个值,用“变量”来使用这个值。进一步发展成,用变量来引用一组值,数组诞生。后来有了集合,它是更强的的数组,依赖object类。存入集合要经历装箱,转换成Object类,拿出的时候再拆箱成之前的类型。在元素量大的时候,会导致性能下降。由于我们使用同一类型更方便操作,后来就产生了泛型,它可以把里面的元素转换成特定的类型,减少了拆装箱带来的困扰。
|
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>在这段代码中,首先定义了一个方法:根据学院查询这个学院的学生个数的方法——QueryAllFreshReport,把查询的结果放到List<FreshStudentReportContracts>这个泛型集合里面。这个泛型指定的类型是FreshStudentReportContracts.
在这个集合里面,可以添加该数据契约里面含有字段(DepartmentName,EnterStudentNuber等)对应的属性值.
之前做机房的时候,泛型集合里面存放的是实体。新生项目中,存放的不仅仅可以是model实体,也可以是数据契约实体,这也算是一种进步吧。
无论是变量、数组、集合、泛型都是一个容器,能盛放数据,只是“瓶口”不太一样。 从盛放一个数据,同种类型的多个数据,到不同种类的多个数据,容器的发展更加的人性化,人类面向对象的思想也在不断的提高。相信未来在学习Java的时候,对容器的理解会更加的深入。
原文地址:http://blog.csdn.net/wangmei4968/article/details/44134341