2014年1月29日 星期三

[C#] ArrayList 和 List 集合型別

來源 : MSDN

System.Collections. ArrayListSystem.Collections.Generic. List< T> 物件是一個複雜版本的陣列。 ArrayList 類別和 List< T> 泛型類別提供的部分功能在大部分 System.Collections 類別中也都有提供 (但 Array 類別除外)。 例如:
另一方面, Array 提供了某些 ArrayListList< T> 所沒有的彈性。例如:
  • 您可以設定 Array 的下限,但 ArrayListList< T> 的下限永遠為零。
  • Array 可以有多個維度,但 ArrayListList< T> 則永遠只有一個維度。不過,您可以輕鬆地建立陣列的清單或清單的清單。
  • 特定類型的 Array (而不是 Object) 提供比 ArrayList 更高的效能。 這是因為 ArrayList 的項目是 Object 型別,因此當您儲存或擷取值型別時,通常會發生 boxing 和 unboxing。 然而, List< T> 在不需要重新配置的情況下 (亦即估計的初始容量很接近清單最大大小),可提供與相同型別的陣列相近的效能。
大部分情況下,可以使用 ArrayListList< T> 來取代陣列呼叫;它們比較容易使用,並且一般而言,具有與相同型別的陣列相似的效能。
Array 位於 System 命名空間 (Namespace); ArrayList 位於 System.Collections 命名空間; List< T> 位於 System.Collections.Generic 命名空間。

List 練習 : 


  1. ///List<t>  Proram...
  2.             ///
  3.             member andy = new member("andy""taipei");
  4.             member way = new member("luo""taipei");
  5.             //用泛型List 來添加自訂物件類別
  6.             List<member> member1 = new List<member>(5) { andy, way };
  7.             //Add()方式
  8.             member1.Add(new member("shomin""china"));
  9.             //展示
  10.             Console.WriteLine(member1[0].ToString());
  11.             Console.WriteLine("--------------------------");
  12.             //insert(index,item)
  13.             member1.Insert(1new member("insert""unknow"));
  14.             //.Count 數量 & Iist<T>有實做IEnumerable介面 所以可以用迴圈
  15.             for (int i = 0; i < member1.Count; i++)
  16.             {
  17.                 Console.WriteLine(member1[i].ToString());
  18.             }
  19.             Console.WriteLine("--------------------------");
  20.            
  21.             //刪除
  22.             member1.RemoveAt(1);
  23.             //必須實作Icomparable
  24.             member1.Sort();
  25.  
  26.             for (int i = 0; i < member1.Count; i++)
  27.             {
  28.                 Console.WriteLine(member1[i].ToString());
  29.             }
  30.             Console.WriteLine("--------------------------");
  31.            
  32.             //實作Icomparer<T>
  33.             member1.Sort(member.按名字排序);
  34.             for (int i = 0; i < member1.Count; i++)
  35.             {
  36.                 Console.WriteLine(member1[i].ToString());
  37.             }
  38.             Console.WriteLine("--------------------------");
  39.             member1.Sort(member.按城市排序);
  40.             for (int i = 0; i < member1.Count; i++)
  41.             {
  42.                 Console.WriteLine(member1[i].ToString());
  43.             }
  44.  
  45.  
  46. ///另外做class
  47.         public class member : IComparable
  48.         {
  49.  
  50.             public string name { get; set; }
  51.             public string city { get; set; }
  52.             private static IComparer<member>[] ary = {
  53.                                       new Sortname(),
  54.                                       new Sortcity()
  55.                                       };
  56.  
  57.            
  58.             public static IComparer<member> 按名字排序
  59.             {
  60.                 get
  61.                 {
  62.                     return ary[0];
  63.                 }
  64.             }
  65.  
  66.             public static IComparer<member> 按城市排序
  67.             {
  68.                 get
  69.                 {
  70.                     return ary[1];
  71.                 }
  72.             }
  73.  
  74.             public member (string name, string city){
  75.                 this.name = name;
  76.                 this.city = city;
  77.             }
  78.  
  79.             public override string ToString()
  80.             {
  81.                 return string.Format("名稱:{0} 居住:{1}", name, city);
  82.             }
  83.  
  84.  
  85.             //實作IComparable
  86.             public int CompareTo(object obj)
  87.             {
  88.                 member x = obj as member;
  89.                 return this.name.CompareTo(x.name);
  90.             }
  91.  
  92.             class Sortname : IComparer<member>
  93.             {
  94.                 public int Compare(member x, member y)
  95.                 {
  96.                     return string.Compare(x.name, y.name);
  97.                 }
  98.             }
  99.  
  100.             class Sortcity : IComparer<member>
  101.             {
  102.                 public int Compare(member x, member y)
  103.                 {
  104.                     return string.Compare(x.city, y.city);
  105.                 }
  106.             }
  107.  
  108.  
  109.         }

沒有留言:

張貼留言