System.Collections. ArrayList 或 System.Collections.Generic. List< T> 物件是一個複雜版本的陣列。 ArrayList 類別和 List< T> 泛型類別提供的部分功能在大部分 System.Collections 類別中也都有提供 (但 Array 類別除外)。 例如:
Array 位於 System 命名空間 (Namespace); ArrayList 位於 System.Collections 命名空間; List< T> 位於 System.Collections.Generic 命名空間。
List 練習 :
- Array 的容量是固定的, ArrayList 或 List< T> 的容量卻是按照需要自動擴充的。如果 ArrayList. Capacity 屬性的值變更,則記憶體重新配置和項目複製會自動完成。
- ArrayList 和 List< T> 提供加入、插入或移除元素範圍的方法。在 Array 中,您一次只可以取得或設定一個元素的值。
- 使用 Synchronized 方法可以很輕鬆建立同步版本的 ArrayList,但這種同步處理很沒有效率。 Array 和 List< T> 類別則會讓使用者自己決定是否實作同步處理。 System.Collections.Concurrent 命名空間不會提供並行清單型別,但是會提供 ConcurrentQueue< T> 和 ConcurrentStack< T> 型別。
- ArrayList 和 List< T> 所提供的方法,可以將固定大小的唯讀包裝函式傳回給集合。 Array 則沒有這種方法。
- 您可以設定 Array 的下限,但 ArrayList 或 List< T> 的下限永遠為零。
- Array 可以有多個維度,但 ArrayList 或 List< T> 則永遠只有一個維度。不過,您可以輕鬆地建立陣列的清單或清單的清單。
- 特定類型的 Array (而不是 Object) 提供比 ArrayList 更高的效能。 這是因為 ArrayList 的項目是 Object 型別,因此當您儲存或擷取值型別時,通常會發生 boxing 和 unboxing。 然而, List< T> 在不需要重新配置的情況下 (亦即估計的初始容量很接近清單最大大小),可提供與相同型別的陣列相近的效能。
Array 位於 System 命名空間 (Namespace); ArrayList 位於 System.Collections 命名空間; List< T> 位於 System.Collections.Generic 命名空間。
List 練習 :
- ///List<t> Proram...
- ///
- member andy = new member("andy", "taipei");
- member way = new member("luo", "taipei");
- //用泛型List 來添加自訂物件類別
- List<member> member1 = new List<member>(5) { andy, way };
- //Add()方式
- member1.Add(new member("shomin", "china"));
- //展示
- Console.WriteLine(member1[0].ToString());
- Console.WriteLine("--------------------------");
- //insert(index,item)
- member1.Insert(1, new member("insert", "unknow"));
- //.Count 數量 & Iist<T>有實做IEnumerable介面 所以可以用迴圈
- for (int i = 0; i < member1.Count; i++)
- {
- Console.WriteLine(member1[i].ToString());
- }
- Console.WriteLine("--------------------------");
- //刪除
- member1.RemoveAt(1);
- //必須實作Icomparable
- member1.Sort();
- for (int i = 0; i < member1.Count; i++)
- {
- Console.WriteLine(member1[i].ToString());
- }
- Console.WriteLine("--------------------------");
- //實作Icomparer<T>
- member1.Sort(member.按名字排序);
- for (int i = 0; i < member1.Count; i++)
- {
- Console.WriteLine(member1[i].ToString());
- }
- Console.WriteLine("--------------------------");
- member1.Sort(member.按城市排序);
- for (int i = 0; i < member1.Count; i++)
- {
- Console.WriteLine(member1[i].ToString());
- }
- ///另外做class
- public class member : IComparable
- {
- public string name { get; set; }
- public string city { get; set; }
- private static IComparer<member>[] ary = {
- new Sortname(),
- new Sortcity()
- };
- public static IComparer<member> 按名字排序
- {
- get
- {
- return ary[0];
- }
- }
- public static IComparer<member> 按城市排序
- {
- get
- {
- return ary[1];
- }
- }
- public member (string name, string city){
- this.name = name;
- this.city = city;
- }
- public override string ToString()
- {
- return string.Format("名稱:{0} 居住:{1}", name, city);
- }
- //實作IComparable
- public int CompareTo(object obj)
- {
- member x = obj as member;
- return this.name.CompareTo(x.name);
- }
- class Sortname : IComparer<member>
- {
- public int Compare(member x, member y)
- {
- return string.Compare(x.name, y.name);
- }
- }
- class Sortcity : IComparer<member>
- {
- public int Compare(member x, member y)
- {
- return string.Compare(x.city, y.city);
- }
- }
- }
沒有留言:
張貼留言