第3讲ArrayList
PPT:ArrayList位于System.Collections命名空间中
也就是说我们要使用ArrayList必须要在程序开头引入using System.Collections命名空间。
PPT:ArrayList对象是较为复杂的数组。ArrayList类提供了Array类未提供的一些功能。
下面我们来看一下ArrayList和Array的之间的区别:
PPT:Array的容量是固定的,而ArrayList的容量可根据需要自动扩充。
也就是说Array在它的生存期不能改变它的存储容量,而ArrayList在生存期可以根据随意变更大小。
PPT:ArrayList提供添加,插入或移除某一范围元素的方法。在Array中,只能一次获取或设置一个元素的值。
ArrayList的使用更加方便。
PPT:Array可以具有多个维度,而ArrayList始终只是一维的。
下面我们用一个例子来简单的介绍ArrayList的使用方法。代码如下:
- using System;
- //引入使用ArrayList的命名空间
- using System.Collections;
- class ArrList
- {
- //声明一个Main的入口函数
- static void Main()
- {
- //new了一个ArrayList的对象实例arr
- ArrayList arr = new ArrayList();
- //声明了一个字符串对象str1
- string str1;
- //使用while循环,条件为true
- //条件为true的话,必然循环中有break跳出循环关键字
- while (true)
- {
- //屏幕上输出一行字,请输入一个字符串元素给ArrayList
- Console.WriteLine("Please add a string to ArrayList:");
- //等待用户输入,将输入的值以字符串的方式赋值给str1变量
- str1 = Console.ReadLine();
- //假如我们输入end字符串,执行break语句跳出循环,结束程序
- if (str1 == "end")
- {
- break;
- }
- //通过Add添加函数将str1的内容添加到ArrayList的实例arr中
- arr.Add(str1);
- Console.WriteLine();
- for (int i = 0; i < arr.Count; i++)
- //打印arr中的元素
- Console.Write("{0} ", arr[i]);
- //打印一个换行符/n
- Console.WriteLine("/n");
- //然后继续循环,继续等待用户输入下一个想要加入arr的字符串元素
- //直到用户输入end字符结束程序
- }
- }
- }
我们连续输入了4个字符串元素,元素是My name is John这4个。并且在屏幕上打印了出来。这时候再输入end,我们可以看到程序结束了。由于打印了end程序执行了break语句就退出执行。
通过这个例子我们可以看到ArrayList的容量是在不断地改变的。它实现了动态数组的功能。而且,它的访问方法跟数组时一样的,都是使用下标读取。ArrayList我们就简单的介绍到这里。如果大家还想了解更多的话,可以去MSDN上进行查找相关的知识。(在线的也有,很方便)
下面我们来介绍一下多维数组。
- int[] a1;//整数类型的一维数组
- int[,] a2;//整数类型的二维数组
- int[,] a2 = new int[2,3];
- int[,] a2 = new int[,]{{1,2,3},{4,5,6}};
- int[,,] a3;//整数类型的三维数组
- int[,,] a3 = new int[10,20,30];
int [,] a2 = new int [2,3];这里演示了如何声明并初始化一个二维数组,在new这个二维数组的时候,给它的空间设定为2乘3,也就是说它的个数是2×3等于6个。
int [,] a2 = new int [,]{{1,2,3},{4,5,6}};这里不但声明并初始化一个二维数组a2,而且给它赋了初值123 456,换句话说它也是一个2乘3的二维数组。
int [,,] a3;这行代码声明了一个三维数组,与二维数组声明不同的只是方括号里多了个逗号。
int [,,] a3 = new int [10,20,30];这是对三维数组的初始化,把它的空间设定为10×20×30;
接下来我们来看C#语言里面比较奇怪的数组,它就是数组的数组。
- int[][] j2; //不规则数组:数组的数组
- int[][] j2 = new int[3][];
- j2[0] = new int[]{1,2,3};
- j2[1] = new int[]{1,2,3,4,5,6};
- j2[2] = new int[]{1,2,3,4,5,6,7,8,9};
- int[][][] j3; //数组的数组的数组
int [][] j2 = new int [3][];首先声明了一个不规则数组j2,并对它进行了初始化。这里很奇怪,它只规定了这个不规则数组的第一维度的空间大小为3,对第二个维度大小并没给出具体的规定,换句话说,第二个维度的空间的大小是不确定的。确定了j2的长度后,就可以对其赋初值了。
j2[0] = new int []{1,2,3};j2的第一个元素看上去像是一维数组的第一个元素,但它却代表了一个一维数组。j2[0]代表一个长度为3的一维数组。
j2[1] = new int []{1,2,3,4,5,6};代表一个长度为6的一维数组。
j2[2] = new int []{1,2,3,4,5,6,7,8,9};代表一个长度为9的一维数组。
也就是说j2不规则数组的三个元素的长度各不相同,它可以存放长度不同的一维数组。
int [][][] j3;是一个数组的数组的数组,在这里就不作详细的介绍了。
我们来看一下数字矩阵的一个示例:
arr | 0~5 | |||||
0~3 | 11 | 12 | 13 | 14 | 15 | 16 |
21 | 22 | 23 | 24 | 25 | 26 | |
31 | 32 | 33 | 34 | 35 | 36 | |
41 | 42 | 43 | 44 | 45 | 46 |
下面我们就用一个例子来演示,如何把这个数字矩阵放到二维数组中去并调用它。代码如下:
- using System;
- class Matrix
- {
- static void Main()
- {
- //声明了一个4乘6的二维数组arr
- int[,] arr = new int[4, 6];
- //这使用了嵌套的循环,对arr赋值
- for(int i = 0;i < 4; i++)
- {
- for (int j = 0; j < 6; j++)
- {
- //arr赋值
- //把第一个维度加上1乘以10作为它的十位数
- //j加上1作为arr的个位数
- arr[i, j] = (i + 1) * 10 + j + 1;
- }
- }
- //将数组打印出来
- for (int i = 0; i < 4; i++)
- {
- for (int j = 0; j < 6; j++)
- {
- Console.Write("{0} ", arr[i, j]);
- }
- //打印一行换行
- Console.WriteLine();
- }
- }
- }
这个4行6列的数字矩阵被打印了出来,跟我们上面表格上的数字矩阵是不是一模一样