C#中ArrayList与Array的区别
C#中ArrayList与Array的区别
C#中ArrayList与Array的区别一,C# array数组的用法范例:
type[] typename=new type[size];
如int[] a=new int[2];string[] str=new string[5];
实事上我们平常是用int[],string[]...的,此时我们已经创建一个Array数组,只不过我们平常没有这种意识而已.
(1):type数据类型不能缺;且要统一,而不能是如 int[] a=new Array[];
(2):数组的大小size不能缺,否则c#认为是出错的,因为数组是一段固定长度的内存;
(3):右边是一个中括号[],而不是();
实例:
//Array ar = new Array();//错误,无法创建抽象类或接口“System.Array”的实例
//int[] array = new Array[3];错误,
//int[] array = new Array[];错误,必须指定数组的大小或初始值
//int[] array = new Array[3];//错误,无法转换为int[]
//int[] array=new int[];//错误,必须指定数组的大小或初始值
//平常我们int[],string[]...事实上就是声明一个array数组了
int[] array = new int[5];
//或int[] arr={1,2,3};
for (int i = 0; i < 5; i++)
{
array[i] = i*100;//注:array数组并不提供add,clear,addRange..方法,而是直接设置或获取值
Response.Write(array[i] + "<br>");
}
Response.Write(array.Length + "<br><br>");
什么是ArrayList
ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处:
动态的增加和减少元素
实现了ICollection和IList接口
灵活的设置数组的大小
使用ArrayList的实例:
ArrayList al = new ArrayList();
for (int i = 0; i < 3; i++)
{
al.Add(i);
Response.Write(al[i].ToString() + "<br>");//输出数组中的元素值
}
Response.Write(al.Count + "<br><br>");
foreach (int obj in al)
{
Response.Write(obj+"-OK"+"<br>");
}
ArrayList和Array相互之间的转化
//例1:
ArrayList List = new ArrayList();
List.Add(1);
List.Add(2);
List.Add(3);
Int32[] values = (Int32[])List.ToArray(typeof(Int32));
//例2:
ArrayList List = new ArrayList();
List.Add(1);
List.Add(2);
List.Add(3);
Int32[] values = new Int32[List.Count];
List.CopyTo(values);
ArrayList最佳使用建议
(1)ArrayList是Array的复杂版本
ArrayList内部封装了一个Object类型的数组,从一般的意义来说,它和数组没有本质的差别,甚至于ArrayList的许多方法,如Index、IndexOf、Contains、Sort等都是在内部数组的基础上直接调用Array的对应方法。
(2)内部的Object类型的影响
对于一般的引用类型来说,这部分的影响不是很大,但是对于值类型来说,往ArrayList里面添加和修改元素,都会引起装箱和拆箱的操作,频繁的操作可能会影响一部分效率。
但是恰恰对于大多数人,多数的应用都是使用值类型的数组。
消除这个影响是没有办法的,除非你不用它,否则就要承担一部分的效率损失,不过这部分的损失不会很大。
(3)数组扩容
这是对ArrayList效率影响比较大的一个因素。
每当执行Add、AddRange、Insert、InsertRange等添加元素的方法,都会检查内部数组的容量是否不够了,如果是,它就会以当前容量的两倍来重新构建一个数组,将旧元素Copy到新数组中,然后丢弃旧数组,在这个临界点的扩容操作,应该来说是比较影响效率的。
(4)频繁的调用IndexOf、Contains等方法(Sort、BinarySearch等方法经过优化,不在此列)引起的效率损失
首先,我们要明确一点,ArrayList是动态数组,它不包括通过Key或者Value快速访问的算法,所以实际上调用IndexOf、Contains等方法是执行的简单的循环来查找元素,所以频繁的调用此类方法并不比你自己写循环并且稍作优化来的快,如果有这方面的要求,建议使用Hashtable或SortedList等键值对的集合。
(5)ArrayList 提供将只读和固定大小包装返回到集合的方法。而 Array 不提供。
另一方面,Array 提供ArrayList 所不具有的某些灵活性。例如:
可以设置 Array 的下限,但 ArrayList 的下限始终为零。
Array 可以具有多个维度,而 ArrayList 始终只是一维的。
特定类型(不包括 Object)的 Array 的性能比 ArrayList 好,这是因为 ArrayList 的元素属于 Object 类型,所以在存储或检索值类型时通常发生装箱和取消装箱。
要求一个数组的大多数情况也可以代之以使用 ArrayList。它更易于使用,并且通常具有与 Object 类型的数组类似的性能。
Array 位于 System 命名空间中;ArrayList 位于 System.Collections 命名空间中。
- 安装C# Windows服务需要“设置服务登录”
- C#验证身份证号码
- C#中ToDictionary,ToLookup
- C#压缩图片不失真
- c语言获取系统日期函数(C# ling to sql 取多条记录最大时间)
- SQL SERVER数据类型对应C#的数据类型
- C#中hashtable 的使用方法
- C# volatile与lock
- C#文件读写的方法
- C#匿名类
- C#中默认参数
- C#中string.format的格式和用法
- C# Task实现多线程
- c# 协变和逆变
- C#中ICollection介绍
- C#中SortedList的用法
- 云南旅游攻略(云南旅游攻略5天攻略)
- 收藏 春节假期,这些景区巨划算(收藏春节假期这些景区巨划算)
- 景区游玩,这些安全知识要牢记(这些安全知识要牢记)
- 各地出招烘 热 旅游(各地出招烘热旅游)
- 2021款起亚霸锐到店了 更换车标,竞争宝马X5有戏吗(2021款起亚霸锐到店了)
- 新款起亚霸锐实拍,比普拉多气派,配3.0T V6,引入国内或许能大卖(新款起亚霸锐实拍)
热门推荐
- 群体面试需要注意哪些
- php网页采集教程交流(PHP实现的抓取小说网站内容功能示例)
- mysql未使用索引的查询(如何在mysql进行查询缓存及失败的解决方法)
- idea如何运行tomcat项目(在IDEA 2020.3.1中部署Tomcat并且创建第一个web项目的过程详解)
- mysql图形化管理工具
- css画三角形几种方法(利用CSS绘制任意角度的扇形示例代码)
- 阿里云服务器怎样设置ip(阿里云服务器ping不通解决办法云服务器搭建完环境访问不了ip解决办法)
- sql server 过期激活(SQL Server评估期已过问题的解决方法)
- dedecms权限调整(增加dedecms后台留言管理功能)
- php读取远程的txt文件(php 根据URL下载远程图片、压缩包、pdf等文件到本地)