ArrayList存储到底是什么?

时间:2011-04-07 13:34:03

标签: c# collections

我知道我可以将任何类型的对象添加到ArrayList实例中。如果我做对了,那么引用类型将被转换为对象(值类型被加框)。另外,ArrayList是否实际存储了引用类型对象的对象列表?

6 个答案:

答案 0 :(得分:4)

ArrayList类在内部使用固定大小的数组object[](对象数组)进行存储。添加元素时,这些元素会自动复制到数组中各自的索引。达到最大大小时,将创建一个具有更大大小的新阵列,并重新复制元素。所以它只是一个围绕静态对象数组的便利包装器。

答案 1 :(得分:2)

ArrayList不存储对象,而仅存储对这些对象的引用。

答案 2 :(得分:2)

ArrayList本质上是object[]的包装器,具有跟踪数组中空间并根据需要增长(加倍)的功能。请注意,通常List<T>是首选,但回答问题:是的,它只存储对object的引用,这些引用可能是盒装值类型。

List<T>几乎相同,但在T[]附近,这意味着可以在没有装箱的情况下存储值类型。引用类型仍存储为引用。您还可以获得更多类型安全性;即你不能添加错误的东西,也不能不正确地投射检索到的物品。

答案 3 :(得分:1)

ArrayListList<object>类似,是在.NET具有泛型之前创建的。

它可以存储任何派生自object的内容,它们都是引用和值类型。所以你可以用它来存储一个对象列表。

答案 4 :(得分:1)

ArrayList的内部存储是一个对象数组(object[])。

ArrayList中存储引用类型时,引用只会转换为object并存储在数组中。引用类型实例本身包含有关它的类型的信息,因此当您从ArrayList获取它时,可以将其强制转换为实际类型。

值对象内部装箱,对该对象的引用存储在数组中。该对象包含有关该值的类型的信息,以便在从ArrayList获取该值时可以正确取消装箱。

答案 5 :(得分:0)

他们存储任何object

意味着只要将它们实例化为对象,就可以用字符串,整数,类填充它们。