1、数组
由于数组是一个引用类型,故在使用的时候,需要使用new关键字创建数组实例。
1.1、声明数组
格式: 数据类型[] 数组名;
特别注意:
①命名规则及其初始化方式上:
二维数组的命名是不一样的,以下是二维数组的命名示例:
②数组遍历的模式上:
不是int[][] 而是[,] 且初始化赋值的时候也要注意写法,这点和一维数组有所不同,但就其本质上来讲是一样的。
int[,] arr2 = new int[2,2] { { 2, 2 },{ 5, 5 } };
foreach (int i in arr2)
{
Console.WriteLine(i);
}
关于数组的遍历都是一样的,两种方式均可!
1.2、初始化数组
格式: 数据类型[] 数组名 = new int[10];
2、访问数组的两种形式
1.1、使用for循环 1.2、使用foreah语句
具体用法示例:
int[] arr2 = new int[] { 2,2,3,4,5 };
foreach (int i in arr1)
{
Console.WriteLine(i);
}
//输出结果:
2
2
3
4
5
3、集合
3.1 数组
- 普通数组的优缺点:
①优点: 连续存储,索引速度快,元素的赋值和修改非常的方便 ②缺点: 数据的插入麻烦,声明数组的时候,无法预知数组的长度,可能会声明数组的长度过大,造成资源浪费。
综合上述普通数组的缺点,故引入了动态数组。
- 动态数组(ArrayList)
关于动态数组的用法如下:
ArrayList list1 = new ArrayList();
//增加数据
list1.Add("123");//是Add不是add,写成小写的a就会报错,这点要注意!
list1.Add("haha");
//修改数据
list1[2] = 34;
//删除数据
list1.RemoveAt(0);//是RemoveAt,不是Remove
//插入数据
list1.Insert(0,"qwe");
小结:使用ArrayList类时,一定要进行引用,即在代码头部加入
using System.Collections;
其次,要注意一些大小写的问题
- 由于ArrayList 存在不安全类型与装箱、拆箱的缺点,这里又引入泛型。
用法与ArrayList类似,但是泛型需要为集合内的元素声明对象类型,具体用法如下:
List<string> list = new List<string>();
//新增数据
list.Add("ABC");
//修改数据
list[0] = "abc";
//删除数据
list.RemoveAt(0);
foreach (string i in list) {
Console.WriteLine(i);
}
4、队列
队列(Queue)特点:删除只能在队头,插入只能在队尾,具有先进先出的规则。 比如队列元素为abc,则执行删除操作后,删除后的元素的序列为bc
Queue q = new Queue();
q.Enqueue('a');//添加元素a
q.Enqueue('b');//添加元素b
q.Enqueue('c');//添加元素c
Console.WriteLine("删除前该队列的元素个数为:"+q.Count);
Console.Write("该队列的元素主要有:");
foreach (char i in q) {
Console.Write(i+" ");
}
Console.WriteLine();
q.Dequeue();//删除元素
Console.WriteLine("删除后该队列的元素个数为:" + q.Count);
Console.Write("该队列的元素主要有:");
foreach (char i in q)
{
Console.Write(i + " ");
}
运行结果:
5、堆栈
特点: 后进先出,添加称为推入,删除称为弹出。
Stack s = new Stack();
s.Push('a');//添加元素a
s.Push('b');//添加元素b
s.Push('c');//添加元素c
Console.WriteLine("删除前该栈的元素个数为:" + s.Count);
Console.Write("该栈的元素主要有:");
foreach (char i in s)
{
Console.Write(i + " ");
}
Console.WriteLine();
s.Pop();//删除元素
Console.WriteLine("删除后该栈的元素个数为:" + s.Count);
Console.Write("该栈的元素主要有:");
foreach (char i in s)
{
Console.Write(i + " ");
}
运行结果:
6、哈希表
Hashtable test = new Hashtable();
test.Add("001","张三");//Add(Key,Value).添加键 值
test.Add("002","李四");
//ContainsValue判断test中是否包含特定的值
if (test.ContainsValue("张三"))
{
Console.WriteLine("名单上已经有这个名字了");
}
else {
test.Add("003", "王五");
}
ICollection key = test.Keys;//获取键的集合
foreach (string i in key) {
Console.WriteLine("学号: " + i + " 姓名: "+test[i]);//获取键和值
}
运行结果:
7、字典
注意:适用于索引号为非int类型数据,如string类型或其他类型。 是一种可以让我们通过索引号查询到特定数据的数据结构类型
Dictionary<string, string> student = new Dictionary<string, string>();
student.Add("s001", "张三");//添加元素
student.Add("s002", "张四");
student.Add("s003", "张五");
student["s003"] = "老六";//修改值
student.Remove("s003");//删除键
//查询Keys
foreach (string key in student.Keys)
{
Console.WriteLine(key);
//查询Values
foreach (string value in student.Values)
{
Console.WriteLine(value);
}
foreach (KeyValuePair<string,string> stu in student)//查询Keys和Values
{
Console.WriteLine("Key:"+stu.Key+" Name:"+stu.Value);
}
}
运行结果: