Eve*_*rts 2 .net c# language-implementation principles arraylist
希望这不是重复.
在此之前,我知道ArrayList不是最好的选择,但这只是好奇心.
简单地说,我想知道ArrayList的实现.我查看并想通了它使用数组存储.
对于数组,当你有:
int [] arr;
Run Code Online (Sandbox Code Playgroud)
arr指向数组的第一个元素,因为它被输入为整数,编译器知道跳转的位置:
arr[2] => arr value + 2 * typeof(int) = address of arr[2]
Run Code Online (Sandbox Code Playgroud)
现在,由于ArrayList是无类型的,我想知道编译器如何能够找出下一个项目的位置.我猜想有一个开销告诉数据是什么,以便编译器可以执行指针算术.
因此,ArrayList应该比任何其他类型的集合慢,因为它不能只是跳转到数据,因为它需要知道之前的内容.这与LinkedList非常相似.
一个ArrayList只包含引用的对象,而不是对象本身.所有引用都是相同的大小,因此问题不存在.
内部类型的引用肯定是object.
对于值类型的通用数组,实际值存储在数组中,并且在您描述时使用元素的大小.如果将值类型放入其中ArrayList,则将其装入对象,并将对该对象的引用存储在该对象中ArrayList.
| 归档时间: |
|
| 查看次数: |
2700 次 |
| 最近记录: |