- 命名空间:System
- 数组声明:<数据类型>[] <数组名>=new <数据类型>[维数]
string[] students = new string[6] { "张三", "李四", "王五", "赵六", "孙七", "周八" };
- 多维数组与交错数组
1.多维数组在声明时必须指定数组的长度,其格式为:type[length,length,length.....],或直接在声明时赋值,由系统自动判断其长度。
int [,] a=new int [3,3];
int [,] b={
{1,2,3},{4,5,6},{7,8,9},
}
交错数组在声明时,至少要指定第一维数组的长度,格式为:type[][][][][].....,同样也可以直接在声明时赋值,有系统判断其长度。
int [][] c=new int[5][];
int [][] d={
new int [] {1,2,3,4,5},
new int [] {1,2,3},
new int [] {1,2,3,4,5,6},
}
2.在为多维数组赋值时,其长度必须前后保持一致,且赋值长度必须与所声明的长度保持一致(与C语言不同,必须全赋值,而在C语言中,系统会自动为没有赋值的位置赋0)
int [,]=new int[2,3]{
{1},//错误
{2,2,2},
}
- 数组、ArrayList、List、Dictionary
数组 命名空间:System
在初始化时必须指定其大小和类型,在内存中是连续存储,通过其数值类型与索引值很容易可以找到数组值。
缺点:在声明时必须指定数组长度,若数组长度过长,会造成内存浪费,若过短,容易造成溢出,且插入不便。
ArrayList 命名空间:System.Collections
ArrayList对象的大小是按照其中存储的数据来动态扩充和收缩的,因此在初始化的时候不需要指定其大小和类型,其默认初始容量为0,可以存储不同的数据类型,但是在存取过程中会引起装箱和拆箱,容易引起类型不匹配的错误,因此ArrayList是不安全的。
ArrayList继承了IList接口,提供数据存储与检索。
using System;
using System.Collections;
public class SamplesArrayList {
public static void Main() {
ArrayList myAL = new ArrayList();
myAL.Add("Hello");
myAL.Add("World");
myAL.Add("!");
Console.WriteLine( "myAL" );
Console.WriteLine( " Count: {0}", myAL.Count );
Console.WriteLine( " Capacity: {0}", myAL.Capacity );
Console.Write( " Values:" );
PrintValues( myAL );
}
public static void PrintValues( IEnumerable myList ) {
foreach ( Object obj in myList )Console.Write( " {0}", obj );
Console.WriteLine();
Console.ReadKey();
}
}
List:ArrayList的泛型等效类,其大部分操作与ArrayList等效,但较ArrayList安全。
在初始化的时候必须指定其类型,但是不需要指定大小,所以在存取过程中不会引起装箱和拆箱操作,在类型相同的情况下,List和数组的性能相当。
Dictionary:在初始化的时候也必须指定其类型,而且他还需要指定一个Key,并且这个Key是唯一的。正因为这样,Dictionary的索引速度非常快,通过Key来查找元素的,元素的顺序是不定的。
总结:
1.数组的容量固定,而ArrayList或List<T>的容量可根据需要自动扩充。
2.数组可有多个维度,而 ArrayList或 List< T> 始终只有一个维度。(可以创建数组列表或列表的列表)
3.特定类型的数组性能优于 ArrayList的性能(不包括Object,因为 ArrayList的元素是 Object ,在存储或检索值类型时通常发生装箱和取消装箱操作)。
4.ArrayList 和 List<T>基本等效,如果List< T> 类的类型T是引用类型,则两个类的行为是完全相同的。如果T是值类型,需要考虑装箱和拆箱造成的性能损耗。List<T> 是类型安全。
- 数组的高级使用
参考网页:https://docs.microsoft.com/zh-cn/dotnet/api/system.array?view=netframework-4.7.2
https://www.jb51.net/Special/265.html