C#基础 之 数组Array、ArrayList、List

来源:互联网 发布:eval函数 js 编辑:程序博客网 时间:2024/06/06 00:34

什么是数组?
数组是一种数据结构,包含同一个类型的多个元素。
数组的声明
int[] myIntArray; 
注:声明数组时,方括号 ([]) 必须跟在类型后面,而不是变量名后面。在 C# 中,将方括号放在变量名后是不合法的语法。
数组的初始化
我们知道数组是引用类型,所以需要给他分配堆上的内存。

1.myIntArray = new int[3];2.myIntArray = new int[] { 1, 2, 3 };3.int[] myIntArray = { 1, 2, 3 };  //当使用这种方法对数组进行初始化时,只能在声明变量数组时使用,不能在声明数组之后使用。

数组具有以下属性:

数组可以是一维、多维或交错的。

数值数组元素的默认值设置为零,而引用元素的默认值设置为 null。

交错数组是数组的数组,因此,它的元素是引用类型,初始化为 null。交错数组元素的维度和大小可以不同。

数组的索引从零开始:具有 n 个元素的数组的索引是从 0 到 n-1。

数组元素可以是任何类型,包括数组类型。

数组类型是从抽象基类型 Array 派生的引用类型。由于此类型实现了 IEnumerable 和 IEnumerable,因此可以对 C# 中的所有数组使用 foreach 迭代。

 

在C#中,数组实际上是对象,而不只是像C和C++中那样的可寻址连续内存区域。

 

System.Array 类提供了许多其他有用的方法和属性,用于排序、搜索和复制数组。

方法名

描述

重载

Array.Length

获取数组的长度

 

Array.Rank

显示数组的维数

 

Array.GetUpperBound(int dimension)

获取 System.Array 的指定维度的上限。参数 dimension: Array 的从零开始的维度

 

GetLowerBound(int dimension)

下限

 

object GetValue(int index1, int index2)

返回索引值

多重

SetValue(object value, int index)

 

 

IndexOf<T>(T[] array, T value)

搜索指定的T类型的对象,并返回整个 Array 中第一个匹配项的索引。<T>必需重载Object的 Equals 比较方法

多重

LastIndexOf<T>(T[] array, T value)

搜索指定的T类型的对象,并返回整个 Array 中最后一个匹配项的索引。

多重

Sort<T>(T[] array)

使用Array的每个元素的System.IComparable<T>泛型接口实现,对整个Array中的元素进行排序。<T>必需实现IComparable接口

多重

ForEach<T>(T[] array, System.Action<T> action)

 

多重

更多在对象查看器:mscorlib.system.arra中

 

 

 

ArrayList 和 List 数组

两者是较为复杂的数组,引用 System.Collections 命名空间

ArrayList 或 List 对象是较为复杂的数组。ArrayList 类和 List 泛型类提供多数 System.Collections 类都提供的但 Array 类未提供的一些功能。例如:

  • Array 的容量是固定的,而 ArrayList 或 List 的容量可根据需要自动扩充。如果更改了 Capacity 属性的值,则可以自动进行内存重新分配和元素复制。
  • ArrayList 和 List 提供添加、插入或移除某一范围元素的方法。在 Array 中,您只能一次获取或设置一个元素的值。
  • 使用 Synchronized 方法很容易创建 ArrayList 或 List 的同步版本。Array 将实现同步的任务留给了用户。
  • ArrayList 和 List 提供将只读和固定大小包装返回到集合的方法;而 Array 不提供。

另一方面,Array 提供了 ArrayList 和 List 所缺少的某些灵活性。例如:

  • 可以设置 Array 的下限,但 ArrayList 或 List 的下限始终为零。
  • Array 可以具有多个维度,而 ArrayList 或 List 始终只是一维的。
  • 特定类型(不包括 Object)的 Array 的性能优于 ArrayList,这是因为 ArrayList 的元素属于 Object 类型,所以在存储或检索值类型时通常发生装箱和取消装箱操作。不过,在不需要重新分配时(即最初的容量十分接近列表的最大容量),List 的性能与同类型的数组十分相近。

需要数组的大多数情况都可以改为使用 ArrayList 或 List;它们更容易使用,并且一般与相同类型的数组具有相近的性能。

 

Array 位于 System 命名空间中;ArrayList 位于 System.Collections 命名空间中;List 位于 System.Collections.Generic 命名空间中。

 

class TestArraysClass{    static void Main()    {        // Declare a single-dimensional array         int[] array1 = new int[5];         // Declare and set array element values        int[] array2 = new int[] { 1, 3, 5, 7, 9 };         // Alternative syntax        int[] array3 = { 1, 2, 3, 4, 5, 6 };         // Declare a two dimensional array        int[,] multiDimensionalArray1 = new int[2, 3];         // Declare and set array element values        int[,] multiDimensionalArray2 = { { 1, 2, 3 }, { 4, 5, 6 } };         // Declare a jagged array        int[][] jaggedArray = new int[6][];         // Set the values of the first array in the jagged array structure        jaggedArray[0] = new int[4] { 1, 2, 3, 4 };    }}

 

 

http://www.cnblogs.com/jiajiayuan/archive/2012/04/19/2442673.html

http://www.cnblogs.com/hzqghost/archive/2009/08/11/1543600.html

 

 

0 0
原创粉丝点击