ArrayList是否在內部使用數組?如果我們使用默認構造函數(new ArrayList()),這是一個空數組嗎?謝謝。Arraylist使用數組?
回答
是的。驗證這一點的最簡單方法之一是查看源代碼。您可以使用reference source,也可以使用.NET Reflector反編譯.NET DLL。
這裏的ArrayList中的相關部分,從反射器:
public class ArrayList : IList, ICollection, IEnumerable, ICloneable
{
static ArrayList()
{
emptyArray = new object[0];
}
public ArrayList()
{
this._items = emptyArray;
}
private object[] _items;
private static readonly object[] emptyArray;
// etc...
}
你不應該依賴於這個總是既然如此。這是一個實現細節,可能會在.NET的未來版本中發生變化(儘管它可能不會)。對於新代碼,您應該考慮使用List<T>
而不是ArrayList
。
是的.. ArrayList本身使用一個數組。
它擁有一個Object數組(在java中,c#應該也是一樣的)來給你一個均勻性。雖然arraylist似乎是一個非常動態的內存分配類,但它的內部操作充滿了數組。
通過調用構造函數創建一個對象的時候,它在內部調用一個有限大小的數組,可能是10(java中實際上只有10個)。然後,當你添加對象到數組列表時,它也必須增加內部數組。所以內部陣列的大小必須增加。所以,創建一個新數組的大小是原來的兩倍,並且舊值被複制到這個新數組中。注意數組的容量增加了,所以可以添加更多的對象。
是的,ArrayList使用數組來存儲項目。
如果在未指定容量的情況下創建ArrayList,將使用默認啓動容量。默認的啓動容量可能取決於框架的版本。對於框架2,它似乎是零。在框架1中,我認爲它是16.
首先看一下IL,ArrayList使用一個空數組。當添加一個值時,該數組被更改爲4個項目。之後,只要陣列已滿,容量就會加倍。 – Joren 2010-04-24 22:14:24
- 1. 數組的ArrayList?
- 2. ArrayList和數組
- 3. ArrayList數組束
- 4. arrayList數組的數組?
- 5. 長整型數組ArrayList和ArrayList的內存使用情況
- 6. 用ArrayList替換數組
- 7. C#ArrayList組使用Linq
- 8. ArrayIndexOutOfBoundsException ArrayList的數組
- 9. 將arraylist的arraylist轉換爲數組?
- 10. C#Sort Object ArrayList ArrayList中的數組?
- 11. Arraylist的Arraylist字符串數組
- 12. 如何使數組元素成爲ArrayList?
- 13. 數組重寫ArrayList中的數組
- 14. 使用ArrayList打印素數
- 15. ArrayList到字符串數組
- 16. 數組對,ArrayList中的java
- 17. 字符串數組ArrayList
- 18. 將數組更改爲ArrayList
- 19. 比較ArrayList和2D數組
- 20. 2 ArrayList中的Java數組
- 21. 數組和ArrayList的感覺
- 22. 將ArrayList轉換爲數組
- 23. C#數組列表ArrayList
- 24. 用兩個隨機數組打印Arraylist
- 25. ArrayList implimentation中的通用數組
- 26. ArrayList的用戶定義的類數組
- 27. 創建一個通用數組而不使用Arraylist
- 28. 何時使用ArrayList以及何時使用簡單整數數組
- 29. 如何將數組的ArrayList轉換爲數組數組
- 30. Java:使用相關數組對ArrayList進行排序
爲什麼你想知道 - OO編程的一點是封裝,所以你不需要知道一個類的內部使用它的接口? (像往常一樣,沒有什麼是完美的,他們可能有理由有知識) – Mark 2010-04-24 22:01:28
@Mark:封裝的目的不是你完全不知道里面發生了什麼;這是你沒有*知道里面發生了什麼。它總是有助於理解系統的內部。根據你的邏輯,'LinkedList'和'List '應該不需要,因爲它們都做同樣的事情,對吧? –
2010-04-24 22:08:04
@Mark - 很高興知道,讓你瞭解聰明人如何做他們做的事。 @rkrauter - 如果你真的想知道,我建議你去看看.NET框架庫源代碼(是的,它是可用的)。 http://weblogs.asp.net/scottgu/archive/2008/01/16/net-framework-library-source-code-now-available.aspx – AboutDev 2010-04-24 22:08:48