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