C#.NET里面的数组是怎么实现的?
来源:互联网 发布:php7mysql数据库操作 编辑:程序博客网 时间:2024/04/29 20:21
C#.NET里面的数组是怎么实现的?
探讨数组的实现,List转换为Array的原理。
我们应该多用C#里面的数组还是链表呢?Array还是泛型List<T>。
问题:
(1) 由于C#的数组可以通过List转换。当List的长度很大的时候,需要很大的内存,我们相信数组不是一整块内存组成。那么数组必然是由多块内存组成。很自然,可以想到数组是由链表+数组组成。
(2) List转换为数组需要花费多少时间?
(3) Array是用什么组成的?
参看MSDN的介绍:
看看msdn对数组的定义:
(1) 在C#中,数组实际上是对象,而不只是像 C 和 C++ 中那样的可寻址连续内存区域。Array 是所有数组类型的抽象基类型。可以使用 Array 具有的属性以及其他类成员。这种用法的一个示例是使用 Length 属性来获取数组的长度。
(2) 数组类型是从抽象基类型 Array 派生的引用类型。由于此类型实现了 IEnumerable 和 IEnumerable,因此可以对 C# 中的所有数组使用 foreach 迭代。
数组是从Array派生的引用类型。
(3) 再看看对Array的介绍
Array 类是支持数组的语言实现的基类。但是,只有系统和编译器能够从 Array 类显式派生。用户应当使用由语言提供的数组构造。
一个元素就是 Array 中的一个值。Array 的长度是它可包含的元素总数。Array 的秩是 Array 中的维数。Array 中维度的下限是 Array 中该维度的起始索引,多维 Array 的各个维度可以有不同的界限。
在 .NET Framework 2.0 版中,Array 类实现 System.Collections.Generic.IList、System.Collections.Generic.ICollection 和 System.Collections.Generic.IEnumerable 泛型接口。由于实现是在运行时提供给数组的,因而对于文档生成工具不可见。因此,泛型接口不会出现在 Array 类的声明语法中,也不会有关于只能通过将数组强制转换为泛型接口类型(显式接口实现)才可访问的接口成员的参考主题。将某一数组强制转换为这三种接口之一时需要注意的关键一点是,添加、插入或移除元素的成员会引发 NotSupportedException。
既然Array由System.Collections.Generic.IList、System.Collections.Generic.ICollection 和 System.Collections.Generic.IEnumerable实现。那么Array就是由链表,集合和枚举器组成的。
Array.Copy 方法不仅可在同一类型的数组之间复制元素,而且可在不同类型的标准数组之间复制元素;它会自动处理强制类型转换。
(4) ToArray是否耗费更多的时间和空间
MSDN:元素使用 System.Array.Copy 来进行复制,后者为一种 O(n) 运算,其中 n 为 Count。
此方法的运算复杂度为 O(n),其中 n 是 Count。
这说明ToArray需要额外的内存空间存放新的数组。
(5) 是否int[] 可以看成是Array<int>的简写形式?
- C#.NET里面的数组是怎么实现的?
- C++里面的const是怎么实现的?
- vb.net是怎么实现的
- vb.net是怎么实现的(转载)
- acegi,里面到底是怎么走的?
- 一个String的result,但是值是数组形式,怎么直接获取到里面的值。
- c语言中调用函数的返回值,如果是数组,主函数要输出这个数组怎么实现?
- 腾讯面试题03.C++里面的const是怎么实现的?
- android 版本知乎登陆edittext 里面的hint效果是怎么实现的
- JAVA里面的对象到底是怎么理解的
- 虚拟机是怎么实现的?
- mysql是怎么实现的
- TagHelper是怎么实现的
- 内核里面writel是如何实现的
- 内核里面writel是如何实现的
- Asp.net core mvc里面怎么添加全局的Filter
- 简单实现C中sizeof函数是怎么实现的(面试的时候可能用到)
- windows的菜单是怎么实现的
- Java Reflection (JAVA反射)
- 失乐言
- 常见文件密码破解方法大放送
- 关于Global.asax中的Session_End
- QQ的四种状态 比喻爱情
- C#.NET里面的数组是怎么实现的?
- 自己编写的一个Json工具类,实现了反射将整个Object转换为Json对象的功能,支持Hibernate的延迟加载对象
- 40种网站设计常用技巧
- Windows Server 2008虚拟技术
- SQL Server连接中常见错误解决方法
- 图像识别技术突破成功,发文庆贺!
- CVS问题集
- int 和 Integer 的区别
- 文章标题