2009-10-14 100 views
3

我想知道什麼是在C#中ArrayList的初始大小?C#中ArrayList的初始大小是什麼?

+5

這可能是明顯的,但除非你使用.NET 1.x,否則應該使用List 。 – 2009-10-14 08:37:53

+1

你的應用程序不應該依賴於此。如果你知道你有一個元素的上限和性能的問題,用這個限制初始化容器,否則依靠它的自動調整能力。 – 2009-10-14 08:58:59

回答

12

0。見下文。

16。 (我要的字符添加到該答案,因爲18個字符是最小)

編輯,糟糕 - 初始容量 16是初始大小是當然0的,因爲它是空的。必須學習如何閱讀。或者你必須學習如何形成你的問題。 ;)

再次編輯;在.NET 1.0中ArrayList的初始容量是16.在2.0中它是4,而現在 - 在.NET 3.5中 - 初始容量已經降低到0了。我沒有解釋爲什麼,你。

向列表中添加第一個元素時,容量將被設置爲4.之後,每當arraylist.Count eq arraylist.Capacity時,容量將翻倍。

+0

這解釋了我在這裏的不同觀察。奇怪的。 – Joey 2009-10-14 08:45:52

+1

您是否有.NET 2.0和3.5容量的源代碼/鏈接?有興趣知道更多關於這個......我認爲它仍然是16. – 2009-10-14 08:46:16

+0

不,不能在MSDN或任何MS解釋爲此找到它。 – 2009-10-14 08:50:04

5

NOTE:以下看似只適用於.NET 3.5;在以前版本的框架中,值是不同的。

據我這裏測試了初始大小和容量爲零:

PS> $a = new-object system.collections.arrayList 
PS> $a.Capacity 
0 
PS> $a.count 
0 

而且,看着反射器的源代碼,同樣也是如此:

public virtual int Capacity 
{ 
    get 
    { 
     return this._items.Length; 
    } 
    ... 
} 

而且_items得到在ctor中設置爲空的object[]

+0

你是對的,從.NET 3.5開始,初始容量被降低到0.在.NET 1.0中,它是16.我已經更新了我的答案,並且會提升你的答案。 ;) – 2009-10-14 08:45:57

+1

我需要學習一些PowerShell。這非常方便。 – 2009-10-14 08:47:24

1
ArrayList list = new ArrayList(); 

size = 0將項添加到arrayList之前,表示沒有項目在那裏。

2

創建它時ArrayList爲空,因此大小爲零。

除非你堅持使用框架1,否則根本不應該使用ArrayList類。改爲使用強類型的通用List<T>類。

0

試試吧。

int capacity = (new ArrayList()).Capacity; 

應該給你初始容量。

7

ArrayList中開始與大小= 0(因爲它是空的)和容量= 16

容量是根據需要加倍,和能力加倍爲O(n)的操作,其中n是新容量。所以如果你在你的列表中插入5000個元素,那麼框架會將ArrayList容量翻倍9次 - 每次翻倍操作的費用是前一次的兩倍。換句話說 - 如果你知道你將把5,000個元素放在一個列表中,你最好明確地初始化它以容納5,000個元素。

如果您知道您即將插入大量元素,您可以顯式設置現有數組列表的容量。您還可以明確減少容量,但是如果您設置容量<計數,則會得到一個ArgumentOutOfRange異常。

+0

非常好地解釋了 – Quagmire 2009-10-14 08:47:34

+1

雖然每次翻倍操作比前一次貴兩倍,但它發生一半的頻率。這使得每個插入的分攤成本不變,因此總共插入n個元素爲O(n)。是的,如果它的規模很大,你最好先把它分配到合適的尺寸,但即使你不這樣做,總的附加成本也相當小。您忽略的另一項成本是平均而言,該清單浪費了其四分之一的空間容量。 – 2009-10-14 14:24:39

相關問題