香蕉视频app

Keep on going never give up.

Let's Go

C# 學習筆記(44)ArrayList集合

C#Lonely2019-05-18 17:10:0684次0條

ArrayList 類(動態數組)

在介紹ArrayList 類(動態數組)之前,我們先從數組說起,數組是一種高效的但是不太方便的數據存儲方式,之所以不方便,是因為固定長度無法修改,且類型單一。于是為了充分利用內存,就有了動態數組的概念。

ArrayList 類(動態數組)是一個最常用的集合類,與數組的操作方法也是最類似的。C#中動態數組的實現就是集合接口IList,ArrayList和List都繼承了接口IList,如下圖所示:

image.png

ArrayList 代表了可被單獨索引的對象的有序集合。它基本上可以替代一個數組。相對于數組而言,ArrayList的好處是長度可以任意改變,類型隨便,但其壞處是ArrayList之所以對類型沒有要求,是因為ArrayList中存儲的類型都是object類型,而其他值類型與object類型進行轉換的過程就會產生拆箱裝箱,拆箱裝箱是一筆不可忽視的開銷,伴隨而來的就是類型的不安全。

而List泛型在聲明時就已經限制了存儲內容的數據類型,所以不存在跟object類型的轉換自然也就沒有了裝箱和拆箱的操作,并且是類型安全的。所以,在平時的使用中,如果只是為了使用動態數組,那么就不要考慮ArrayList了。

ArrayList的長度問題:與數組不同的是,ArrayList 可以使用索引在指定的位置添加和移除項目,動態數組會自動重新調整它的大小。香蕉视频app每次集合中實際包含的元素個數(集合名.Count)超過了可以包含的元素個數(集合名.capcity)的時候,集合就會向內存中申請多開辟一倍的空間,來保證集合的長度一直夠用。

同時 ArrayList 也允許在列表中進行動態內存分配、增加、搜索、排序各項。

創建一個ArrayList 類的對象之前首先要引用命名空間using System.Collections; 然后需要使用該類的構造方法,如下表所示。

構造函數 作用
ArrayList() 創建 ArrayList 的實例,集合的容量是默認初始容量
ArrayList(ICollection c) 創建 ArrayList 的實例,該實例包含從指定實例中復制的元素,并且初始容量與復制的元素個數相同
ArrayList(int capacity) 創建 ArrayList 的實例,并設置其初始容量

ArrayList 類中常用的屬性和方法如下表所示

屬性或方法 作用
int Add(object value) 向集合中添加 object 類型的元素,返回元素在集合中的下標
void AddRange(ICollection c) 向集合中添加另一個集合 c
Capacity 屬性,用于獲取或設置集合中可以包含的元素個數
void Clear() 從集合中移除所有元素
bool Contains(object item) 判斷集合中是否含有 item 元素,若含有該元素則返回 True, 否則返回 False
void CopyTo(Array array) 從目標數組 array 的第 0 個位置開始,將整個集合中的元素復制到類型兼容的數組 array 中
void CopyTo(Array array,int arraylndex) 從目標數組 array 的指定索引 arraylndex 處,將整個集合中的元素賦值到類型兼容的數組 array 中
void CopyTo(int index,Array array,int arrayIndex,int count) 從目標數組 array 的指定索引 arrayindex 處,將集合中從指定索引 index 開始的 count 個元素復制到類型兼容的數組 array 中
Count 屬性,用于獲取集合中實際含有的元素個數
int IndexOf(object value) 返回 value 值在集合中第一次出現的位置
int IndexOf(object value,int startIndex) 返回 value 值在集合的 startindex 位置開始第一次出現的位置
int IndexOf(object value,int startIndex,int count) 返回 value 值在集合的 startindex 位置開始 count 個元素中第一次出現的位置
int LastIndexOf(object value) 返回 value 值在集合中最后一次出現的位置
int LastIndexOf(object value,int startIndex) 返回 value 值在集合的 startindex 位置開始最后一次出現的位置
int LastIndexOf(object value,int startIndex,int count) 搜索指定的 System.Object,并返回ArrayList中到指定索引為止包含指定元素數的這部分元素中最后一個匹配項的從零開始的索引
void Insert(int index,object value) 將元素插入ArrayList的指定索引處。
void InsertRange(int index,ICollection c) 將集合中的元素插入ArrayList的指定索引處。
void Remove(object obj) 從ArrayList中移除特定對象的第一個匹配項。
void RemoveAt(int index) 移除ArrayList的指定索引處的元素。
void RemoveRange(int index,int count) 從ArrayList中移除一定范圍的元素。
void Reverse() 將集合中的元素順序反轉
void Reverse(int index,int count) 將集合中從指定位置 index 處的 count 個元素反轉
void Sort() 將集合中的元素排序,默認從小到大排序
void Sort(IComparer comparer) 將集合中的元素按照比較器 comparer 的方式排序
void Sort(int index,int count,IComparer comparer) 將集合中的元素從指定位置 index 處的 count 個元素按照比較器 comparer 的方式排序
void TrimToSize() 將集合的大小設置為集合中元素的實際個數

香蕉视频app 下面通過實例來演示 ArrayList 類中屬性和方法的使用,代碼示例(代碼僅供說明演示,請按照實際情況進行調整):

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

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            ArrayList list = new ArrayList(); 
            //例:添加單個元素
            list.Add(123456); //整型
            list.Add("張三"); //string類型
            list.Add(3.1415926); //浮點類型
            list.Add(true); //布爾類型
            //等等……

            //例:添加集合元素
            list.AddRange(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }); //數組類型
            list.AddRange(list); //ArrayList類型
            //等等……

            //清除集合所有元素
            list.Clear();

            //刪除單個元素,移除特定對象的第一個匹配項。
            list.Remove("張三");

            //根據索引去刪除元素
            list.RemoveAt(0); //刪除索引為0的元素

            //根據索引去移除一定范圍的元素
            list.RemoveRange(0,3);//刪除索引0-3的元素

            //升序排序
            list.Sort();  //當排序類型不一致時有可能會引發報錯

            //反轉排序
            list.Reverse();

            //在指定的位置插入一個元素
            list.Insert(2, "我是插入的內容");//在下標為2的位置,插入元素

            //在指定的位置插入一個集合
            list.InsertRange(6, new string[] { "王五", "李四" }); //在下標為6的位置,插入集合

            //判斷是否包含指定的元素
            bool b = list.Contains("王五");

            //我們知道,ArrayList的容量會隨著我們的需要自動按照一定規律進行填充,當我們確定不再添加元素時,我們要釋放多余的空間,這就用到了Capacity屬性和TrimtoSize()方法
            //利用Capacity屬性可以查看當前集合的容量  
            //利用TrimToSize()方法可以釋放多余的空間

            //查看當前容量
            int number = list.Capacity;
            //去除多余的容量
            list.TrimToSize();

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

        }
    }
}


暗錨,解決錨點偏移

文章評論

    嘿,來試試登錄吧!