Tip16 元素数量可变的情况下不应使用数组
2017-08-03 16:27
323 查看
Tip16 元素数量可变的情况下不应使用数组
数组一旦被创建,长度就不能改变。如果我们需要一个动态且可变长度的集合,就应该使用ArrayList或List<T>来创建。List<T>是ArrayList的泛型实现,它省去了拆箱和装箱带来的开销。
注:不能肆意对数组指定过大的长度,这会让数组成为一个大对象(占用内存超过85000字节的对象),大对象在回收过程中会带来效率很低的问题。
如果一定要动态改变数组的长度,一种方法是将数组转换为ArrayList或List<T>:
另一种方法(效率很低):是用数组的复制功能,创建一个名为ReSize的扩展方法,具体如下:
调用如下:
最后建议——在元素数量可变的情况下不应使用数组
数组一旦被创建,长度就不能改变。如果我们需要一个动态且可变长度的集合,就应该使用ArrayList或List<T>来创建。List<T>是ArrayList的泛型实现,它省去了拆箱和装箱带来的开销。
注:不能肆意对数组指定过大的长度,这会让数组成为一个大对象(占用内存超过85000字节的对象),大对象在回收过程中会带来效率很低的问题。
如果一定要动态改变数组的长度,一种方法是将数组转换为ArrayList或List<T>:
int[] iArr = { 0, 1, 2, 3, 4, 5, 6 }; ArrayList arrayListInt = ArrayList.Adapter(iArr); arrayListInt.Add(7); List<int> listInt = iArr.ToList<int>(); listInt.Add(7);
另一种方法(效率很低):是用数组的复制功能,创建一个名为ReSize的扩展方法,具体如下:
public static class ClassForExtensions { // public static Array ReSize(this Array array, int newSize) { Type t = array.GetType().GetElementType(); Array newArray = Array.CreateInstance(t, newSize); Array.Copy(array, 0, newArray, 0, Math.Min(array.Length, newSize)); return newArray; } }
调用如下:
//调用: int[] iArr = { 0, 1, 2, 3, 4, 5, 6 }; iArr = (int[])iArr.ReSize(10);
最后建议——在元素数量可变的情况下不应使用数组
相关文章推荐
- 建议16:元素数量可变的情况下不应使用数组
- 编写高质量代码改善C#程序的157个建议——建议16:元素数量可变的情况下不应使用数组
- 关于数组声明元素数量可否使用enum类型变量的测试
- 第十四周项目一数组大折腾(4)创建一个长度为16的整形数组a并初始化,删除数组中所有能被3整除的元素(数组中实际有效使用的元素将不足16),输出删除后数组中的全部元素
- 【捷哥浅谈PHP】第三弹---使用二分查找法查找数组中的元素位置
- 编写一个使用数组类模板Array对数组进行排序、求最大值和求元素和的程序,并采用相关数据进行测试。
- 如何使用Linq查找数组中一个元素所在的位置
- 1、将数组中的元素再定义为特殊的名字方便程序中使用
- JS中split使用方法和数组中元素的删除
- JAVA-基本元素使用(随机数,数组,排序)
- Java中关于可变长参数的那些事[参数中使用省略号的情况]
- C#使用linq语句查询数组中以特定字符开头元素的方法
- 第十四周项目一数组大折腾(5)创建一个长度为16的整形数组a并初始化前15个元素,输入一个整数b,将b插入到a[0]位置(原有的数据往后“移动”)
- JavaScript基础 使用delete删除数组中一个元素的值 但是元素的所占的那个空间还在
- C#不使用Split()方法,遍历数组,使用“|”分割元素并输出 分类: C# 2012-05-13 23:21 1416人阅读 评论(0) 收藏
- C++使用STL::vector删除数组内的重复元素
- OC基础使用(七 NSMutableArray 可变数组)
- 使用 PHP 把 16 进制的颜色代码转换成 RGB 数组
- php使用array_rand()函数从数组中随机选择一个或多个元素
- 数组应用之去除重复元素、Arrays数组工具的使用、二维数组、数组总结