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. C#ArrayList組使用Linq
- 4. ArrayIndexOutOfBoundsException ArrayList的數組
- 5. Arraylist的Arraylist字符串數組
- 6. 如何使數組元素成爲ArrayList?
- 7. 使用ArrayList打印素數
- 8. 比較ArrayList和2D數組
- 9. 將數組更改爲ArrayList
- 10. C#數組列表ArrayList
- 11. 2 ArrayList中的Java數組
- 12. 用兩個隨機數組打印Arraylist
- 13. ArrayList的用戶定義的類數組
- 14. 創建一個通用數組而不使用Arraylist
- 15. 何時使用ArrayList以及何時使用簡單整數數組
- 16. 如何將數組的ArrayList轉換爲數組數組
- 17. 在Java中,爲什麼要在arrayList上使用數組
- 18. 在Java中使用ArrayList的2D動態數組
- 19. 使用Struts 2迭代器標籤訪問ArrayList數組
- 20. 使用包含在ArrayList中的整型數組
- 21. 動態二維數組在Java中使用Arraylist
- 22. 書寫組合遞歸地使用Java中的整數ArrayList
- 23. 使用數組實現我自己的ArrayList
- 24. 使用ArrayList的
- 25. 帶有可變數目數組的ArrayList
- 26. 使用ArrayList中的函數調用Java
- 27. 使用ArrayList調用構造函數
- 28. 將字符串數組轉換爲Arraylist的ArrayList
- 29. ArrayList的ArrayList。如何刪除數組內的intem?
- 30. 使用JSTL迭代ArrayList的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