亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#中數組Array,ArrayList,泛型List詳細對比

2020-01-24 01:05:50
字體:
來源:轉載
供稿:網友

在C#中數組Array,ArrayList,泛型List都能夠存儲一組對象,但是在開發中根本不知道用哪個性能最高,下面我們慢慢分析分析。

一、數組Array

數組是一個存儲相同類型元素的固定大小的順序集合。數組是用來存儲數據的集合,通常認為數組是一個同一類型變量的集合。

Array 類是 C# 中所有數組的基類,它是在 System 命名空間中定義。

數組在內存中是連續存儲的,所以它的索引速度非???,而且賦值與修改元素也非常簡單。

Array數組具體用法:

using System;namespace WebApp{  class Program  {    static void Main(string[] args)    {      //System.Array      //1、數組[] 特定類型、固定長度      string[] str1 = new string[3];      str1[0] = "a";      str1[1] = "b";      str1[2] = "c";      Console.WriteLine(str1[2]);      string[] str2 = new string[] { "a", "b", "c" };      Console.WriteLine(str2[0]);      string[] str3 = { "a", "b", "c" };      Console.WriteLine(str3[0]);      //2、二維數組      //int[,] intArray=new int[2,3]{{1,11,111},{2,22,222}};      int[,] intArray = new int[2, 3];      intArray[0, 0] = 1;      intArray[0, 1] = 11;      intArray[0, 2] = 111;      intArray[1, 0] = 2;      intArray[1, 1] = 22;      intArray[1, 2] = 222;      Console.WriteLine("{0},{1},{2}", intArray[0, 0], intArray[0, 1], intArray[0, 2]);      Console.WriteLine("{0},{1},{2}", intArray[1, 0], intArray[1, 1], intArray[1, 2]);      //3、多維數組      int[, ,] intArray1 = new int[,,]      {        {{1, 1}, {11, 11}, {111, 111}},        {{2, 2}, {22, 22}, {222, 222}},        {{3, 3}, {33, 33}, {333, 333}}      };      Console.WriteLine("{0},{1},{2},{3},{4},{5}", intArray1[0, 0, 0], intArray1[0, 0, 1], intArray1[0, 1, 0], intArray1[0, 1, 1],        intArray1[0, 2, 0], intArray1[0, 2, 1]);      Console.WriteLine("{0},{1},{2},{3},{4},{5}", intArray1[1, 0, 0], intArray1[1, 0, 1], intArray1[1, 1, 0], intArray1[1, 1, 1],        intArray1[1, 2, 0], intArray1[1, 2, 1]);      Console.WriteLine("{0},{1},{2},{3},{4},{5}", intArray1[2, 0, 0], intArray1[2, 0, 1], intArray1[2, 1, 0], intArray1[2, 1, 1],        intArray1[2, 2, 0], intArray1[2, 2, 1]);      //4、交錯數組即數組的數組      int[][] intArray2 = new int[4][];      intArray2[0] = new int[] { 1 };      intArray2[1] = new int[] { 2, 22 };      intArray2[2] = new int[] { 3, 33, 333 };      intArray2[3] = new int[] { 4, 44, 444,4444 };      for (int i = 0; i < intArray2.Length; i++)      {        for (int j = 0; j < intArray2[i].Length; j++)        {          Console.WriteLine("{0}", intArray2[i][j]);        }      }      Console.ReadKey();    }  }}

數組雖然存儲檢索數據很快,但是也有一些缺點:

1、在聲明數組的時候必須指定數組的長度,如果不清楚數組的長度,就會變得很麻煩。

2、數組的長度太長,會造成內存浪費;太短會造成數據溢出的錯誤。

3、在數組的兩個數據間插入數據是很麻煩的

更多參考微軟官方文檔:Array 類 (System)

二、ArrayList

既然數組有很多缺點,C#就提供了ArrayList對象來克服這些缺點。

ArrayList是在命名空間System.Collections下,在使用該類時必須進行引用,同時繼承了IList接口,提供了數據存儲和檢索。

ArrayList對象的大小是按照其中存儲的數據來動態擴充與收縮的。因此在聲明ArrayList對象時并不需要指定它的長度。

ArrayList 的默認初始容量為 0。隨著元素添加到 ArrayList 中,容量會根據需要通過重新分配自動增加??赏ㄟ^調用 TrimToSize 或通過顯式設置 Capacity 屬性減少容量。

using System;using System.Collections;public class SamplesArrayList {  public static void Main() {   ArrayList myAL = new ArrayList();   myAL.Add("Hello");   myAL.Add("World");   myAL.Add("!");   Console.WriteLine( "myAL" );   Console.WriteLine( "  Count:  {0}", myAL.Count );   Console.WriteLine( "  Capacity: {0}", myAL.Capacity );   Console.Write( "  Values:" );   PrintValues( myAL );  }  public static void PrintValues( IEnumerable myList ) {   foreach ( Object obj in myList )     Console.Write( "  {0}", obj );   Console.WriteLine();   Console.ReadKey();  }}

運行結果:

ArrayList解決了數組中所有的缺點,但是在存儲或檢索值類型時通常發生裝箱和取消裝箱操作,帶來很大的性能耗損。尤其是裝箱操作,例如:

      ArrayList list = new ArrayList();      //add       list.Add("joye.net");      list.Add(27);      //update       list[2] = 28;      //delete       list.RemoveAt(0);      //Insert       list.Insert(0, "joye.net1"); 

在List中,先插入了字符串joye.net,而且插入了int類型27。這樣在ArrayList中插入不同類型的數據是允許的。因為ArrayList會把所有插入其中的數據當作為object類型來處理,在使用ArrayList處理數據時,很可能會報類型不匹配的錯誤,也就是ArrayList不是類型安全的。

更多參考微軟官方ArrayList文檔:ArrayList 類 (System.Collections)

三、泛型List<T>

由于ArrayList存在不安全類型與裝箱拆箱的缺點,所以出現了泛型的概念。

List 類是 ArrayList 類的泛型等效類。該類使用大小可按需動態增加的數組實現 IList 泛型接口,大部分用法都與ArrayList相似。

List<T> 是類型安全的,在聲明List集合時,必須為其聲明List集合內數據的對象類型。

using System;using System.Collections.Generic;public class Example{  public static void Main()  {    List<string> dinosaurs = new List<string>();    Console.WriteLine("/nCapacity: {0}", dinosaurs.Capacity);    dinosaurs.Add("Tyrannosaurus");    dinosaurs.Add("Amargasaurus");    dinosaurs.Add("Mamenchisaurus");    dinosaurs.Add("Deinonychus");    dinosaurs.Add("Compsognathus");    Console.WriteLine();    foreach(string dinosaur in dinosaurs)    {      Console.WriteLine(dinosaur);    }    Console.WriteLine("/nCapacity: {0}", dinosaurs.Capacity);    Console.WriteLine("Count: {0}", dinosaurs.Count);    Console.WriteLine("/nContains(/"Deinonychus/"): {0}",      dinosaurs.Contains("Deinonychus"));    Console.WriteLine("/nInsert(2, /"Compsognathus/")");    dinosaurs.Insert(2, "Compsognathus");    Console.WriteLine();    foreach(string dinosaur in dinosaurs)    {      Console.WriteLine(dinosaur);    }    Console.WriteLine("/ndinosaurs[3]: {0}", dinosaurs[3]);    Console.WriteLine("/nRemove(/"Compsognathus/")");    dinosaurs.Remove("Compsognathus");    Console.WriteLine();    foreach(string dinosaur in dinosaurs)    {      Console.WriteLine(dinosaur);    }    dinosaurs.TrimExcess();    Console.WriteLine("/nTrimExcess()");    Console.WriteLine("Capacity: {0}", dinosaurs.Capacity);    Console.WriteLine("Count: {0}", dinosaurs.Count);    dinosaurs.Clear();    Console.WriteLine("/nClear()");    Console.WriteLine("Capacity: {0}", dinosaurs.Capacity);    Console.WriteLine("Count: {0}", dinosaurs.Count);  }}

如果聲明List集合內數據的對象類型是string,然后往List集合中插入int類型的111,IDE就會報錯,且不能通過編譯。顯然這樣List<T>是類型安全的。

對返回結果集再封裝:

  public class ResultDTO<T>  {    public T Data { get; set; }    public string Code { get; set; }    public string Message { get; set; }  }      var data = new CityEntity();      return new ResultDTO<CityEntity> { Data = data, Code = "1", Message = "sucess"};      var data2 = new List<CityEntity>();      return new ResultDTO<List<CityEntity>> { Data = data2, Code = "1", Message = "sucess" };      var data1 = 1;      return new ResultDTO<int> { Data = data1, Code = "1", Message = "sucess" };

更多參考微軟官方文檔:List泛型類

四、總結

1、數組的容量固定,而ArrayList或List<T>的容量可根據需要自動擴充。

2、數組可有多個維度,而 ArrayList或 List< T> 始終只有一個維度。(可以創建數組列表或列表的列表)

3、特定類型的數組性能優于 ArrayList的性能(不包括Object,因為 ArrayList的元素是 Object ,在存儲或檢索值類型時通常發生裝箱和取消裝箱操作)。

4、 ArrayList 和 List<T>基本等效,如果List< T> 類的類型T是引用類型,則兩個類的行為是完全相同的。如果T是值類型,需要考慮裝箱和拆箱造成的性能損耗。List<T> 是類型安全。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕亚洲欧美一区二区三区| 亚洲电影免费观看高清完整版在线| 日韩电视剧在线观看免费网站| 色诱女教师一区二区三区| 国产精品男人的天堂| 久久综合88中文色鬼| 一个色综合导航| 亚洲欧美日韩国产精品| 国产精品久久久久久av下载红粉| 欧美xxxx14xxxxx性爽| 亚洲www永久成人夜色| 亚洲97在线观看| 日韩欧美高清在线视频| 久久夜精品香蕉| 98精品国产自产在线观看| 国产精品久久激情| 国产精品美腿一区在线看| 欧美极品在线视频| 狠狠色噜噜狠狠狠狠97| 欧美与欧洲交xxxx免费观看| 欧美一级电影久久| 欧美日韩性视频| 在线视频日韩精品| 久久久精品久久久| 激情久久av一区av二区av三区| 成人福利视频在线观看| 日韩av在线直播| 91精品国产91久久久久福利| 欧美中文字幕在线播放| 亚洲国产精品人久久电影| 亚洲美女av在线播放| 欧美性高潮床叫视频| 欧美xxxx18国产| 日韩欧美在线中文字幕| 久久久伊人日本| 欧美专区在线观看| 国产亚洲精品美女久久久| 国产精品7m视频| 国模精品一区二区三区色天香| 精品国产拍在线观看| 国产综合久久久久久| 久久综合88中文色鬼| 51视频国产精品一区二区| 91成人免费观看网站| 国产一区二区在线免费视频| 7m第一福利500精品视频| 亚洲专区在线视频| 中文字幕国产亚洲| 91美女片黄在线观| 国产精品免费电影| 91av视频在线播放| 亚洲人午夜色婷婷| 亚洲社区在线观看| 国内精品久久久| 国产成人亚洲综合91| 欧美激情一二区| 91国语精品自产拍在线观看性色| 欧美一级电影在线| 欧洲精品在线视频| 久久久噜噜噜久久中文字免| 国产精品观看在线亚洲人成网| 午夜精品一区二区三区在线播放| 自拍偷拍亚洲在线| 国产精品第一视频| 亚洲精品电影网站| 6080yy精品一区二区三区| 国产精品美女午夜av| 清纯唯美亚洲激情| 国产免费久久av| 国内偷自视频区视频综合| 国产精品影片在线观看| 欧美在线一级va免费观看| 日韩高清中文字幕| 国产成人avxxxxx在线看| 日韩在线不卡视频| 国产精品自在线| 中文日韩在线观看| 欧美性猛交xxxx免费看久久久| 日韩电影大全免费观看2023年上| 欧美风情在线观看| 日韩精品亚洲精品| 亚洲国产日韩欧美综合久久| 亚洲aⅴ日韩av电影在线观看| 国产区亚洲区欧美区| 亚洲成人免费在线视频| 久久久精品免费视频| 国产日韩在线观看av| 亚洲大胆美女视频| 欧美电影在线观看| 日韩电影中文 亚洲精品乱码| 久久久久免费精品国产| 欧美电影免费看| 日韩精品极品视频免费观看| 欧美精品www在线观看| 色综合久久天天综线观看| 亚洲色图日韩av| 欧美成人免费视频| 91精品久久久久| 亚洲国产高潮在线观看| 久久久久久国产免费| 日韩视频一区在线| 国产精品嫩草影院一区二区| 国产成人啪精品视频免费网| 欧美成人精品xxx| 91精品国产91久久久久久吃药| 懂色av中文一区二区三区天美| 成人免费直播live| 精品国产欧美一区二区五十路| 日韩精品视频在线播放| 亚洲午夜小视频| 国产精品亚洲片夜色在线| 成人激情视频在线播放| 欧美一级成年大片在线观看| 97精品视频在线播放| 亚洲色图25p| 精品久久久久久久久久| 中文字幕亚洲天堂| 久久91亚洲精品中文字幕| 日本久久久久亚洲中字幕| 久操成人在线视频| 国精产品一区一区三区有限在线| 国产香蕉97碰碰久久人人| 2025国产精品视频| 疯狂蹂躏欧美一区二区精品| 亚州精品天堂中文字幕| 亚洲人成网7777777国产| 日韩欧美一区二区三区久久| 久久免费精品视频| 亚洲国产精品久久91精品| 亚洲精品欧美日韩| xxx欧美精品| 亚洲欧美成人一区二区在线电影| 国产女精品视频网站免费| 亚洲国产精品悠悠久久琪琪| 精品动漫一区二区| 91久久嫩草影院一区二区| 亚洲在线www| 大胆人体色综合| 亚洲精品美女在线| 国模精品一区二区三区色天香| 亚洲综合在线中文字幕| 久久久亚洲影院你懂的| 成人写真福利网| 久久精品视频网站| 国产网站欧美日韩免费精品在线观看| 成人欧美一区二区三区黑人孕妇| 亚洲人成亚洲人成在线观看| 成人免费自拍视频| 亚洲成人a级网| 亚洲va久久久噜噜噜| 91精品国产色综合久久不卡98| 日韩精品视频三区| 久久久久中文字幕2018| 亚洲国产精品成人av| 亚洲精品久久久久久久久久久久久| 国产在线精品自拍| 欧美成人精品不卡视频在线观看| 日韩在线国产精品| 亚洲第一区第一页| 热re99久久精品国产66热| 国产福利成人在线| 成人精品在线视频| 久久精品人人做人人爽| 国精产品一区一区三区有限在线|