共用方式為


ArrayList 類別

定義

使用會視需要動態增加大小的數位,實作 IList 介面。

public ref class ArrayList : System::Collections::IList
public ref class ArrayList : ICloneable, System::Collections::IList
public class ArrayList : System.Collections.IList
public class ArrayList : ICloneable, System.Collections.IList
[System.Serializable]
public class ArrayList : ICloneable, System.Collections.IList
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class ArrayList : ICloneable, System.Collections.IList
type ArrayList = class
    interface IEnumerable
    interface IList
    interface ICollection
type ArrayList = class
    interface ICollection
    interface IEnumerable
    interface IList
    interface ICloneable
type ArrayList = class
    interface IEnumerable
    interface IList
    interface ICollection
    interface ICloneable
[<System.Serializable>]
type ArrayList = class
    interface IList
    interface ICollection
    interface IEnumerable
    interface ICloneable
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ArrayList = class
    interface IList
    interface ICollection
    interface IEnumerable
    interface ICloneable
Public Class ArrayList
Implements IList
Public Class ArrayList
Implements ICloneable, IList
繼承
ArrayList
衍生
屬性
實作

範例

下列範例示範如何建立和初始化 ArrayList,以及如何顯示其值。

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myList );
int main()
{
   
   // Creates and initializes a new ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "Hello" );
   myAL->Add( "World" );
   myAL->Add( "!" );
   
   // Displays the properties and values of the ArrayList.
   Console::WriteLine( "myAL" );
   Console::WriteLine( "    Count:    {0}", myAL->Count );
   Console::WriteLine( "    Capacity: {0}", myAL->Capacity );
   Console::Write( "    Values:" );
   PrintValues( myAL );
}

void PrintValues( IEnumerable^ myList )
{
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "   {0}", obj );
   }

   Console::WriteLine();
}

/* 
This code produces output similar to the following:

myAL
    Count:    3
    Capacity: 4
    Values:   Hello   World   !

*/
using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Creates and initializes a new ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add("Hello");
      myAL.Add("World");
      myAL.Add("!");

      // Displays the properties and values of the ArrayList.
      Console.WriteLine( "myAL" );
      Console.WriteLine( "    Count:    {0}", myAL.Count );
      Console.WriteLine( "    Capacity: {0}", myAL.Capacity );
      Console.Write( "    Values:" );
      PrintValues( myAL );
   }

   public static void PrintValues( IEnumerable myList )  {
      foreach ( Object obj in myList )
         Console.Write( "   {0}", obj );
      Console.WriteLine();
   }
}


/*
This code produces output similar to the following:

myAL
    Count:    3
    Capacity: 4
    Values:   Hello   World   !

*/
Imports System.Collections

Public Class SamplesArrayList    
    
    Public Shared Sub Main()
        
        ' Creates and initializes a new ArrayList.
        Dim myAL As New ArrayList()
        myAL.Add("Hello")
        myAL.Add("World")
        myAL.Add("!")
        
        ' Displays the properties and values of the ArrayList.
        Console.WriteLine("myAL")
        Console.WriteLine("    Count:    {0}", myAL.Count)
        Console.WriteLine("    Capacity: {0}", myAL.Capacity)
        Console.Write("    Values:")
        PrintValues(myAL)
    End Sub

    Public Shared Sub PrintValues(myList As IEnumerable)
        Dim obj As [Object]
        For Each obj In  myList
            Console.Write("   {0}", obj)
        Next obj
        Console.WriteLine()
    End Sub

End Class


' This code produces output similar to the following:
' 
' myAL
'     Count:    3
'     Capacity: 4
'     Values:   Hello   World   !

備註

重要

不建議您將 ArrayList 類別用於新的開發。 相反地,我們建議您使用泛型 List<T> 類別。 ArrayList 類別的設計目的是要保存物件的異質集合。 不過,它不一定會提供最佳效能。 相反地,我們建議使用下列專案:

  • 針對物件的異質集合,請使用 List<Object> (C#) 或 List(Of Object) (在 Visual Basic 中) 類型。
  • 對於物件的同質集合,請使用 List<T> 類別。 如需這些類別的相對效能討論,請參閱 List<T> 參考主題中的 效能考慮。 如需使用泛型而非非泛型集合類型的一般資訊,請參閱 gitHub 上的 非泛型集合不應使用

不保證排序 ArrayList。 您必須先呼叫 Sort 方法來排序 ArrayList,才能執行需要排序 ArrayList 的作業(例如 BinarySearch)。 若要維護自動排序為加入新元素的集合,您可以使用 SortedSet<T> 類別。

ArrayList 的容量是 ArrayList 可以保存的項目數目。 隨著元素新增至 ArrayList,透過重新配置自動增加容量。 呼叫 TrimToSize 或明確設定 Capacity 屬性,即可減少容量。

僅限 .NET Framework 對於非常大的 ArrayList 物件,您可以將運行時間環境中 <gcAllowVeryLargeObjects> 組態 true 專案的 enabled 屬性,將 64 位系統上的最大容量增加到 20 億個元素。

這個集合中的元素可以使用整數索引來存取。 此集合中的索引是以零起始。

ArrayList 集合接受 null 作為有效值。 它也允許重複的專案。

不支援使用多維度陣列作為 ArrayList 集合中的專案。

建構函式

ArrayList()

初始化空的 ArrayList 類別的新實例,並具有預設的初始容量。

ArrayList(ICollection)

初始化 ArrayList 類別的新實例,這個實例包含從指定的集合複製的專案,且其初始容量與複製的項目數目相同。

ArrayList(Int32)

初始化 ArrayList 類別的新實例,這個實例是空的,而且具有指定的初始容量。

屬性

Capacity

取得或設定 ArrayList 可以包含的項目數目。

Count

取得實際包含在 ArrayList中的項目數目。

IsFixedSize

取得值,指出 ArrayList 是否有固定大小。

IsReadOnly

取得值,指出 ArrayList 是否為唯讀。

IsSynchronized

取得值,指出是否同步存取 ArrayList (線程安全)。

Item[Int32]

取得或設定位於指定索引處的專案。

SyncRoot

取得對象,這個物件可用來同步存取 ArrayList

方法

Adapter(IList)

為特定 IList建立 ArrayList 包裝函式。

Add(Object)

將物件加入至 ArrayList的結尾。

AddRange(ICollection)

ICollection 的專案加入 ArrayList結尾。

BinarySearch(Int32, Int32, Object, IComparer)

使用指定的比較子搜尋已排序之 ArrayList 中的專案範圍,並傳回專案以零起始的索引。

BinarySearch(Object, IComparer)

使用指定的比較子搜尋整個已排序的 ArrayList 專案,並傳回專案以零起始的索引。

BinarySearch(Object)

使用預設比較子搜尋項目的整個排序 ArrayList,並傳回專案以零起始的索引。

Clear()

ArrayList移除所有專案。

Clone()

建立 ArrayList的淺層複本。

Contains(Object)

判斷專案是否在 ArrayList中。

CopyTo(Array, Int32)

從目標陣列的指定索引開始,將整個 ArrayList 複製到相容的一維 Array

CopyTo(Array)

從目標陣列的開頭開始,將整個 ArrayList 複製到相容的一維 Array

CopyTo(Int32, Array, Int32, Int32)

從目標陣列的指定索引開始,將 ArrayList 的元素範圍複製到相容的一維 Array

Equals(Object)

判斷指定的物件是否等於目前的物件。

(繼承來源 Object)
FixedSize(ArrayList)

傳回具有固定大小的 ArrayList 包裝函式。

FixedSize(IList)

傳回具有固定大小的 IList 包裝函式。

GetEnumerator()

傳回整個 ArrayList的列舉值。

GetEnumerator(Int32, Int32)

傳回 ArrayList中專案範圍的列舉值。

GetHashCode()

做為預設哈希函式。

(繼承來源 Object)
GetRange(Int32, Int32)

會傳回 ArrayList,代表來源 ArrayList中的專案子集。

GetType()

取得目前實例的 Type

(繼承來源 Object)
IndexOf(Object, Int32, Int32)

搜尋指定的 Object,並傳回從指定索引開始且包含指定項目數目之 ArrayList 中第一個出現專案的以零起始的索引。

IndexOf(Object, Int32)

搜尋指定的 Object,並傳回從指定索引延伸至最後一個專案之 ArrayList 中第一個出現專案的以零起始的索引。

IndexOf(Object)

搜尋指定的 Object,並傳回整個 ArrayList內第一個出現專案的以零起始的索引。

Insert(Int32, Object)

將專案插入指定索引處的 ArrayList

InsertRange(Int32, ICollection)

將集合的專案插入指定索引處的 ArrayList

LastIndexOf(Object, Int32, Int32)

搜尋指定的 Object,並傳回 ArrayList 中專案範圍中最後一次出現的以零起始的索引,其中包含指定的專案數目,並在指定的索引處結束。

LastIndexOf(Object, Int32)

搜尋指定的 Object,並傳回從第一個專案延伸至指定索引之 ArrayList 中最後一個出現專案的以零起始的索引。

LastIndexOf(Object)

搜尋指定的 Object,並傳回整個 ArrayList中最後一個出現的以零起始的索引。

MemberwiseClone()

建立目前 Object的淺層複本。

(繼承來源 Object)
ReadOnly(ArrayList)

傳回只讀 ArrayList 包裝函式。

ReadOnly(IList)

傳回只讀 IList 包裝函式。

Remove(Object)

ArrayList移除第一個出現的特定物件。

RemoveAt(Int32)

拿掉位於 ArrayList之指定索引處的專案。

RemoveRange(Int32, Int32)

ArrayList移除項目範圍。

Repeat(Object, Int32)

傳回 ArrayList,其專案是指定值的複本。

Reverse()

反轉整個 ArrayList中的項目順序。

Reverse(Int32, Int32)

反轉指定範圍中的項目順序。

SetRange(Int32, ICollection)

ArrayList中,複製集合中的項目範圍。

Sort()

排序整個 ArrayList中的專案。

Sort(IComparer)

使用指定的比較子來排序整個 ArrayList 中的專案。

Sort(Int32, Int32, IComparer)

使用指定的比較子,在 ArrayList 中排序元素範圍中的專案。

Synchronized(ArrayList)

傳回已同步處理 ArrayList 包裝函式(線程安全)。

Synchronized(IList)

傳回已同步處理 IList 包裝函式(線程安全)。

ToArray()

ArrayList 的項目複製到新的 Object 陣列。

ToArray(Type)

ArrayList 的項目複製到指定之項目類型的新陣列。

ToString()

傳回表示目前 物件的字串。

(繼承來源 Object)
TrimToSize()

將容量設定為 ArrayList中的實際項目數目。

擴充方法

Cast<TResult>(IEnumerable)

IEnumerable 的項目轉換成指定的型別。

OfType<TResult>(IEnumerable)

根據指定的型別篩選 IEnumerable 的專案。

AsParallel(IEnumerable)

啟用查詢的平行處理。

AsQueryable(IEnumerable)

IEnumerable 轉換成 IQueryable

適用於

執行緒安全性

此類型的公用靜態 (Shared) 成員是安全線程。 不保證任何實例成員都是安全線程。

只要集合未修改,ArrayList 就可以同時支援多個讀取器。 若要保證 ArrayList的線程安全性,所有作業都必須透過 Synchronized(IList) 方法傳回的包裝函式來完成。

透過集合列舉本質上不是安全線程的程式。 即使集合同步處理,其他線程仍然可以修改集合,這會導致列舉值擲回例外狀況。 若要保證列舉期間的線程安全性,您可以在整個列舉期間鎖定集合,或攔截其他線程所做的變更所產生的例外狀況。

另請參閱