【ITOO】--陣列、集合、泛型解析
一、概念(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的時候,對容器的理解會更加的深入。
相關文章
- ajax 提交陣列 泛型集合陣列泛型
- java泛型之泛型陣列。Java泛型陣列
- java 泛型陣列Java泛型陣列
- Java 集合列舉泛型(一)Java泛型
- 泛型陣列列表ArrayList泛型陣列
- 泛型、陣列列表與協變泛型陣列
- 8.集合、泛型、列舉、註解、反射泛型反射
- 泛型集合 list泛型
- 泛型集合 Queue泛型
- Java:Collection集合、泛型Java泛型
- Java集合和泛型Java泛型
- 集合框架-引入泛型框架泛型
- c#泛型集合C#泛型
- 07.集合和泛型泛型
- C# 泛型集合SortedListC#泛型
- 泛型方法、初始集合和集合的遍歷泛型
- Day22 集合,ArrayList,泛型泛型
- .NET泛型解析(上)泛型
- .NET泛型解析(下)泛型
- Swift - 陣列、字典、集合Swift陣列
- js陣列方法集合JS陣列
- Java反射給泛型集合賦值Java反射泛型賦值
- DataTable轉換list泛型集合(反射)泛型反射
- C#中陣列Array、ArrayList、泛型List<T>的比較C#陣列泛型
- C# 泛型集合的自定義型別排序C#泛型型別排序
- 【java】【集合】陣列和集合的基本概述Java陣列
- java之陣列與集合Java陣列
- Java入門教程十二(集合與泛型)Java泛型
- 集合框架-泛型類的概述及使用框架泛型
- 集合框架-泛型方法的概述和使用框架泛型
- 集合框架-泛型介面的概述和使用框架泛型
- Java 中的泛型 集合(List,Set) MapJava泛型
- C#類繼承自泛型集合C#繼承泛型
- js將偽陣列或者集合轉換為陣列JS陣列
- C++ 簡單實現陣列類泛型程式設計示例C++陣列泛型程式設計
- 集合框架-通過Object轉型問題引入泛型框架Object泛型
- Rust中將陣列轉為集合型別的簡單方法Rust陣列型別
- Java 中泛型的全面解析Java泛型