CS4L1——ArrayList

本章代码关键字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
System.Collections            //各个数据集合类所在的命名空间
Arraylist //数组列表类,使用object存储所有值
arrayList.Add() //增加
arrayList.AddRange() //范围增加
arrayList.Insert() //插入
arrayList.Remove() //移除某个元素
arrayList.RemoveAt() //移除某个位置上的元素
arrayList.Clear() //清空列表
arrayList[] //列表可以通过索引器去读取元素值修改元素值
arrayList.Contains() //检查列表是否存在某个元素
arrayList.IndexOf() //正向查找元素位置,返回值是下标,若找不到则返回-1,如果有重复就会返回第一个
arrayList.LastIndexOf() //反向查找元素位置,返回的是从头开始的索引数,若找不到则返回-1,如果有重复就会返回列表中最后一个
arrayList.Count //列表元素数量
arrayList.Capacity //列表当前数组容量

ArrayList

Arraylist​ 是一个C#帮我们封装好的类,它的本质是一个 object​ 类型的数组,可以装载所有类型
Arraylist​ 类帮助我们实现了很多方法,比如数组的增删查改

ArrayList 的声明

使用 ArrayList​ 需要引用 System.Collections​ 这个命名空间

1
2
3
4
5
6
7
8
9
10
11
12
using System.Collections;

namespace lesson01_ArrayList
{
internal class Program
{
static void Main(string[] args)
{
ArrayList array = new ArrayList();
}
}
}

ArrayList 的增删查改

只要是 object​ 类型的都可以增加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Test { }

internal class Program
{
static void Main(string[] args)
{
ArrayList array = new ArrayList();
array.Add(1);
array.Add("123");
array.Add(true);
array.Add(new object());
array.Add(new Test());
array.Add(1);
array.Add(true);
}
}

范围添加

范围增加(批量增加,把另一个 ArrayList​ 容器里的内容加到后面)

1
2
3
4
5
6
7
8
9
ArrayList array = new ArrayList();
array.Add(1);
array.Add("123");
array.Add(true);
array.Add(new object());

ArrayList array2 = new ArrayList();
array2.Add(123);
array.AddRange(array2);

插入

1
2
3
4
5
6
7
ArrayList array = new ArrayList();
array.Add(1);
array.Add("123");
array.Add(true);
array.Add(new object());
array.Insert(1, "12345678");
Console.WriteLine(array[1]);

输出:

1
12345678

移除指定数组元素

从头找,找到就删(所以如果有多个这样的元素,就会先删第一个)

1
2
3
4
5
6
7
ArrayList array = new ArrayList();
array.Add(1);
array.Add(2);
array.Add(1);
Console.WriteLine(array[0] + "," + array[1]);
array.Remove(1);
Console.WriteLine(array[0] + "," + array[1]);

输出:

1
2
1,2
2,1

移除指定位置的元素

1
2
3
4
5
6
7
ArrayList array = new ArrayList();
array.Add(1);
array.Add(2);
array.Add(1);
Console.WriteLine(array[0] + "," + array[1] + "," + array[2]);
array.RemoveAt(1);
Console.WriteLine(array[0] + "," + array[1]);

输出:

1
2
1,2,1
1,1

清空

1
arrayList.Clear()

得到指定位置的元素

1
2
3
4
5
ArrayList array = new ArrayList();
array.Add(1);
array.Add(2);
array.Add(1);
Console.WriteLine(array[0] + "," + array[1] + "," + array[2]);

输出:

1
1,2,1

查看元素是否存在

1
2
3
4
5
6
ArrayList array = new ArrayList();
array.Add("123");
if (array.Contains("123"))
{
Console.WriteLine("存在");
}

输出:

1
存在

正向查找元素位置

找到的返回值是下标,若找不到则返回 -1​,如果有重复就会返回第一个

1
2
3
4
5
6
ArrayList array = new ArrayList();
array.Add("123");
array.Add(true);
int index = array.IndexOf(true);
Console.WriteLine(index);
Console.WriteLine(array.IndexOf(false));

输出:

1
2
1
-1

反向查找元素位置

返回的是从头开始的索引数,若找不到则返回 -1​,如果有重复就会返回列表中最后一个

1
2
3
4
5
ArrayList array = new ArrayList();
array.Add(true);
array.Add("123");
array.Add(true);
Console.WriteLine(array.LastIndexOf(true));

输出:

1
2

直接通过索引器改即可

1
2
3
4
ArrayList arrayList = new ArrayList();
arrayList.Add(true);
arrayList[0] = false;
Console.WriteLine(arrayList[0]);

输出:

1
False

遍历

列表元素数量

1
2
3
4
ArrayList arrayList = new ArrayList();
arrayList.Add(true);
arrayList.Add(false);
Console.WriteLine(arrayList.Count);

输出:

1
2

列表当前数组容量

1
2
3
4
ArrayList arrayList = new ArrayList();
arrayList.Add(true);
arrayList.Add(false);
Console.WriteLine(arrayList.Capacity);

输出:

1
4

for 循环遍历

1
2
3
4
5
6
7
8
9
ArrayList arrayList = new ArrayList();
arrayList.Add("123");
arrayList.Add(true);
arrayList.Add(false);

for (int i = 0; i < arrayList.Count; i++)
{
Console.WriteLine(arrayList[i]);
}

输出:

1
2
3
123
True
False

foreach 迭代器遍历

迭代器遍历(只有实现迭代器(#TODO#​)的类可以用这种方法)

1
2
3
4
5
6
7
8
9
ArrayList arrayList = new ArrayList();
arrayList.Add("123");
arrayList.Add(true);
arrayList.Add(false);

foreach (var item in arrayList)
{
Console.WriteLine(item);
}

输出:

1
2
3
123
True
False

装箱拆箱

ArrayList​ 本质上是一个可以自动扩容的 object​ 数组,由于用 object​ 来存储数据,自然就会存在装箱拆箱
当往其中进行值类型存储时就是在装箱,将值类型对象取出来转换使用时,就是在拆箱
所以 ArrayList​ 尽量少用,之后会学习更好的数据容器

1
2
3
4
ArrayList arrayList = new ArrayList();
int k = 1;
arrayList[0] = k; //装箱
k = (int)arrayList[0]; //拆箱