程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> 泛型--List

泛型--List

編輯:關於C#

數組類型的一個典型問題是固定容量。如果您預先不知道數組將容納多少對象,就會冒著給數組聲明太小(溢出)或太大(浪費空間)的空間的風險。

您的程序可能讓用戶輸入數據或從Web站點收集數據。當它發現對象(字符串,書,值等等),將把它們添加進數組,但您並不知道在這段時間內會收集多少數據。固定尺寸的數組並不是一個很好的選擇,因為您並不知道需要多大的數組。

List類是一個根據需要動態增加尺寸的數組。它提供了一組有用的方法和屬性用於操作。它們中最重要的顯示在表9-3中。

表9-3 List的方法和屬性

方法或屬性 作用 Capacity 用於獲取或設置List可容納元素的數量。當數量超過容量時,這個值會自動增長。您可以設置這個值以減少容量,也可以調用trin()方法來減少容量以適合實際的元素數目。 Count 屬性,用於獲取數組中當前元素數量 Item( ) 通過指定索引獲取或設置元素。對於List類來說,它是一個索引器。 Add( ) 在List中添加一個對象的公有方法 AddRange( ) 公有方法,在List尾部添加實現了ICollection接口的多個元素 BinarySearch( ) 重載的公有方法,用於在排序的List內使用二分查找來定位指定元素. Clear( ) 在List內移除所有元素 Contains( ) 測試一個元素是否在List內 CopyTo( ) 重載的公有方法,把一個List拷貝到一維數組內 Exists( ) 測試一個元素是否在List內 Find( ) 查找並返回List內的出現的第一個匹配元素 FindAll( ) 查找並返回List內的所有匹配元素 GetEnumerator( ) 重載的公有方法,返回一個用於迭代List的枚舉器 Getrange( ) 拷貝指定范圍的元素到新的List內 IndexOf( ) 重載的公有方法,查找並返回每一個匹配元素的索引 Insert( ) 在List內插入一個元素 InsertRange( ) 在List內插入一組元素 LastIndexOf( ) 重載的公有方法,,查找並返回最後一個匹配元素的索引 Remove( ) 移除與指定元素匹配的第一個元素 RemoveAt( ) 移除指定索引的元素 RemoveRange( ) 移除指定范圍的元素 Reverse( ) 反轉List內元素的順序 Sort( ) 對List內的元素進行排序 ToArray( ) 把List內的元素拷貝到一個新的數組內 trimToSize( ) 將容量設置為List中元素的實際數目

FCL的習慣是給集合類提供一個Item元素,它在C#中被實現為一個索引器

當您創建了一個List,並沒有定義它可以容納多少對象。在List內添加元素使用Add()方法,列表會自已處理它內部的帳目,如例9-13所示。

例9-13 List的使用

using System;
using System.Collections.Generic;
using System.Text;
namespace ListCollection
{
  //存儲於List內的一個簡單類
  public class Employee
  {
    private int empID;
    public Employee(int empID)
    {
      this.empID = empID;
    }
    public override string ToString()
    {
      return empID.ToString();
    }
    public int EmpID
    {
      get
      {
        return empID;
      }
      set
      {
        empID = value;
      }
    }
  }
  public class Tester
  {
    static void Main()
    {
      List<Employee> empList = new List<Employee>();
      List<int> intList = new List<int>();
      //填充List
      for (int i = 0; i < 5; i++)
      {
        empList.Add(new Employee(i + 100));
        intList.Add(i * 5);
      }
      //打印整數列表所有內容
      for (int i = 0; i < intList.Count; i++)
      {
        Console.Write("{0} ", intList[i].ToString());
      }
      Console.WriteLine("\n");
      //打印員工列表的所有內容
      for (int i = 0; i < empList.Count; i++)
      {
        Console.Write("{0} ", empList[i].ToString());
      }
      Console.WriteLine("\n");
      Console.WriteLine("empList.Capacity: {0}", empList.Capacity);
    }
  }
}

輸出結果:

0 5 10 15 20
100 101 102 103 104
empArray.Capacity: 16

(譯者注:很有意思,在我的電腦上empArray.Capacity輸出的是8,看樣子老外的電腦和操作系統跟我們的是有些不同)

在Array中,您定義了Array操作對象的數目,如果嘗試添加多於這個數目的元素,Array將引發一個異常。在List中,您不需要聲明List操作對象的數目。List有一個Capacity屬性,表示List能夠存儲的元素的數目:

public int Capacity { get; set; }

默認容量是16,當您添加第17個元素時,容量會自動翻倍為32。如果您改變for循環為:

for (int i = 0;i<17;i++)

輸出結果會變成這樣:

0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
empArray.Capacity: 32

您可以手動設置容量為任何等於或大於這個數目的數字。如果您把它設置為小於這個數目的數字,程序將引發一個ArgumentOutOfRangeException異常。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved