香蕉视频app

Keep on going never give up.

Let's Go

C# 學習筆記(46)List泛型集合

C#Lonely2019-05-18 20:34:53123次0條

C# 語言中泛型集合是泛型中最常見的應用,主要用于約束集合中存放的元素。由于在集合中能存放任意類型的值,在取值時經常會遇到數據類型轉換異常的情況,因此推薦在定義集合時使用泛型集合。

前面《C# ArrayList》與《C# Hashtable》中已經介紹了非泛型集合中的 ArrayList、Hashtable。

非泛型集合中的 ArrayList、Hashtable 在泛型集合中分別使用 List<T> Dictionary<K,V> 來表示,其他泛型集合均與非泛型集合一致。

List所屬命名空間using System.Collections.Generic; 繼承于IList<T>接口,如下圖所示:

image.png

List<T>類是 ArrayList 類的泛型等效類。該類使用大小可按需動態增加的數組實現 IList<T> 泛型接口。

泛型的好處: 它為使用C#語言編寫面向對象程序增加了極大的效力和靈活性。不會強行對值類型進行裝箱和拆箱操作,或對引用類型進行向下強制類型轉換,因此性能得到提高。

性能注意事項:

在決定使用IList<T> 還是使用ArrayList類(兩者具有類似的功能)時,記住IList<T> 類在大多數情況下執行得更好并且是類型安全的。

如果對IList<T> 類的類型 T 使用引用類型,則兩個類的行為是完全相同的。但是,如果對類型 T 使用值類型,則需要考慮實現和裝箱問題。

添加到 ArrayList 中的任何引用或值類型都將隱式地向上強制轉換為 Object。如果項是值類型,則必須在將其添加到列表中時進行裝箱操作,在檢索時進行取消裝箱操作。

香蕉视频app 強制轉換以及裝箱和拆箱操作都會降低性能;在必須對大型集合進行循環訪問的情況下,裝箱和取消裝箱的影響非常明顯。


怎樣創建泛型集合?

香蕉视频app 利用System.Collections.Generic命名空間下面的List<T>泛型類創建集合,語法如下:

List<T> ListOfT = new List<T>();

香蕉视频app 其中的"T"就是所要使用的類型,既可以是簡單類型,如string、int,也可以是用戶自定義類型。


List的方法和屬性的作用

方法或屬性 作用
Capacity

香蕉视频app 用于獲取或設置List可容納元素的數量。當數量超過容量時,這個值會自動增長。您可以設置這個值以減少容量。

Count 用于獲取數組中當前元素數量
Item( ) 通過指定索引獲取或設置元素。對于List類來說,它是一個索引器。
Add( ) 添加一個對象到List<T>的結尾處
AddRange( ) 將指定集合元素添加到List<T>的末尾處
BinarySearch( ) 使用指定的比較器在已排序List<T>的某個元素范圍中搜索元素,并返回該元素從零開始的索引。
Clear( ) 從List<T>中移除所有元素
Contains( ) 判斷某元素是否在List<T>內
CopyTo( ) 把一個List<T>拷貝到一維數組內
Exists( ) 確定List<T>是否包含與指定謂詞定義的條件匹配的元素。
Find( ) 查找并返回List<T>內的出現的第一個匹配元素
FindAll( ) 查找并返回List<T>內的所有匹配元素
GetEnumerator( ) 返回循環訪問List<T>的枚舉數。
GetRange( ) 拷貝指定范圍的元素到新的List<T>內
IndexOf( ) 查找指定的對象,并返回整個List<T>中第一個匹配項的從零開始的索引。
Insert( ) 將元素插入List<T>的指定索引處。
InsertRange( ) 將集合中的元素插入List<T>的指定索引處。
LastIndexOf( ) 查找指定對象并返回整個List<T>中最后一個匹配項的從零開始索引。
Remove( ) 從List<T>中移除特定對象的第一個匹配項。
RemoveAt( ) 移除List<T>的指定索引處的元素。
RemoveRange( ) 移除指定范圍的元素
Reverse( ) 反轉List<T>內元素的順序
Sort( ) 對List<T>內的元素進行排序
ToArray( ) 將List<T>內的元素拷貝到一個新的數組中
TrimExcess( ) 將容量設置為List<T>中元素的實際數目(如果該數目小于某個閾值)。

代碼示例:

using System;
using System.Collections.Generic; //引用命名空間

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            //創建泛型集合對象
            List<string> list = new List<string>();
            //添加一個元素
            list.Add("張三");
            list.Add("李四");
            list.Add("王五");

            //添加一組元素
            list.AddRange(new string[] { "韓梅梅","李雷","沈婷","張麗" });
            list.AddRange(list);

            //在index位置插入一個元素
            list.Insert(0, "岳云鵬");

            //刪除指定的第一個元素
            list.Remove("韓梅梅");

            //刪除下標為index的元素
            list.RemoveAt(4);

            //從下標index開始,刪除count個元素
            list.RemoveRange(0,1);

            //給List里面元素排序
            list.Sort(); //默認是元素第一個字母按升序

            //給List里面元素順序反轉
            list.Reverse();

            //判斷某個元素是否在該List中
            if (list.Contains("岳云鵬"))
            {
                Console.WriteLine("岳云鵬在這");
            }
            else
            {
                Console.WriteLine("岳云鵬不在這");
            }

            //清空
            list.Clear();

            //獲得List中元素數目
            Console.WriteLine(list.Count);

            //轉換為數組
            string[] strArr = list.ToArray();

            //遍歷輸出
            for (int i = 0; i < list.Count; i++)
            {
                Console.WriteLine(list[i]);
            }
            Console.ReadKey();

        }
    }
}


暗錨,解決錨點偏移

文章評論

    嘿,來試試登錄吧!