集合(Collection)类
- 集合如同数组,被用来储存和管理一组具有相同性质的对象。除了基本的数据管理功能,还提供了各种数据结构及算法的实现。
- 集合中包含的对象称为集合元素。
- 集合可以分为泛型集合类和非泛型集合类。
- 泛型集合类一般位于System.Collections.Generic命名空间,非泛型集合类一般位于System.Collections命名空间,除此之外,在System.Collection.Specialized命名空间中包含专用的和强类型的集合,例如,链接的列表词典、位向量以及只包含字符串的集合。
- 集合是专门用于数据存储和检索的类。这些类提供了对栈(stack)、队列(queue)、列表(list)和哈希表(hash table)的支持。大多数集合类实现了相同的接口。
- 集合(Collection)类服务于不同的目的,如为元素动态分配内存,基于索引访问列表项等等。这些类创建 Object 类的对象的集合。在 C# 中,Object 类是所有数据类型的基类。
ArrayList(动态数组)
动态数组:代表了可被单独索引的对象的有序集合。
它基本上可以替代一个数组。但是,与数组不同的是,可以使用索引在指定的位置添加和移除项目,动态数组会自动重新调整它的大小。它也允许在列表中进行动态内存分配、增加、搜索、排序各项。
定义
语法格式:
一:初始化 System.Collections.ArrayList 类的新实例,该实例为空并且具有默认初始容量。
ArrayList 标识符 = new ArrayList();
二:初始化 System.Collections.ArrayList 类的新实例,该实例为空并且具有指定的初始容量。
ArrayList 标识符 = new ArrayList(新列表最初可以存储的元素数);
三:初始化 System.Collections.ArrayList 类的新实例,该类包含从指定集合复制的元素,并具有与复制的元素数相同的初始容量。
ArrayList 标识符 = new ArrayList(其元素被复制到新列表的原列表);
代码示例:
ArrayList arrayList1 = new ArrayList();
ArrayList arrayList2 = new ArrayList(5);
ArrayList arrayList3 = new ArrayList(arrayList1);
ArrayList 类的一些常用的属性
public virtual bool IsReadOnly { get; }
官方摘要:获取一个值,该值指示 System.Collections.ArrayList 是否为只读。
返回结果:bool值:如果 System.Collections.ArrayList 是只读的,则为 true;否则为 false。 默认值为 false。
简单理解:判断列表是否只读。
代码示例:
ArrayList arrayList1 = new ArrayList();
Console.WriteLine(arrayList1.IsReadOnly);
--->
False
public virtual bool IsFixedSize { get; }
官方摘要:获取一个值,该值指示 System.Collections.ArrayList 是否具有固定大小。
返回结果:bool值:如果 true 具有固定大小,则为 System.Collections.ArrayList;否则为 false。 默认值为 false。
简单理解:判断列表是否具有固定大小。
代码示例:
ArrayList arrayList1 = new ArrayList();
Console.WriteLine(arrayList1.IsFixedSize);
--->
False
public virtual int Count { get; }
官方摘要:获取 System.Collections.ArrayList 中实际包含的元素数。
返回结果:System.Collections.ArrayList 中实际包含的元素数。
简单理解:获取实际包含的元素个数。
代码示例:
ArrayList arrayList1 = new ArrayList(5);
arrayList1.Add(1);
arrayList1.Add(2);
Console.WriteLine(arrayList1.Count);
--->
2
public virtual int Capacity { get; set; }
官方摘要:获取或设置 System.Collections.ArrayList 可包含的元素数。
返回结果:System.Collections.ArrayList 可包含的元素数。
简单理解:获取可包含的元素个数。
代码示例:
ArrayList arrayList1 = new ArrayList(5);
arrayList1.Add(1);
arrayList1.Add(2);
Console.WriteLine(arrayList1.Capacity);
--->
5
ArrayList 类的一些常用的方法
public static ArrayList Repeat(object value, int count);
官方摘要:返回 System.Collections.ArrayList,其元素是指定值的副本。
参数说明:
- value:要在新的 System.Collections.ArrayList 中对其进行多次复制的 System.Object。 该值可以为 null。
- count:value 应复制的次数。
返回结果:具有 count 个元素数的 System.Collections.ArrayList,所有元素都是 value 的副本。
简单理解:创建列表:指定元素个数,指定元素的值且所有元素的值相同。
代码示例:
ArrayList arrayList = ArrayList.Repeat("aa",5);
foreach (var item in arrayList)
{
Console.WriteLine(item);
}
--->
aa
aa
aa
aa
aa
public virtual int Add(object value);
官方摘要:将对象添加到 System.Collections.ArrayList 的结尾处。
参数说明:
- value:要添加到System.Collections.ArrayList 的结尾处的System.Object。 该值可以为 null。
返回结果:已添加 value 的 System.Collections.ArrayList 索引。
简单理解:在列表结尾添加数据。
代码示例:
ArrayList arrayList =new ArrayList();
arrayList.Add("w");
arrayList.Add(2);
arrayList.Add(true);
foreach (var item in arrayList)
{
Console.WriteLine(item);
}
--->
w
2
True
public virtual void AddRange(ICollection c);
官方摘要:将 System.Collections.ICollection 的元素添加到 System.Collections.ArrayList 的末尾。
参数说明:
- c:System.Collections.ICollection,其元素应添加到 System.Collections.ArrayList 的末尾。 集合本身不能为null,但它可以包含为 null 的元素。
简单理解:将某一列表的元素添加到另一列表结尾。
代码示例:
ArrayList arrayList1 =new ArrayList();
arrayList1.Add("w");
arrayList1.Add(2);
arrayList1.Add(true);
ArrayList arrayList2 = new ArrayList();
arrayList2.AddRange(arrayList1);
foreach (var item in arrayList2)
{
Console.WriteLine(item);
}
--->
w
2
True
public virtual int BinarySearch(object value);
官方摘要:使用默认的比较器在整个已排序的 System.Collections.ArrayList 中搜索元素,并返回该元素从零开始的索引。
参数说明:
- value:要查找的 System.Object。 该值可以为 null。
返回结果:如果找到 value,则为排序的 System.Collections.ArrayList 中从零开始的 value 索引;否则为一个负数,它是大于 value 的下一个元素索引的按位求补,或者,如果没有更大的元素,则为 System.Collections.ArrayList.Count 的按位求补。
简单理解:使用二分法在ArrayList中搜索指定的值。
代码示例:(更多重载,不一一列出)
ArrayList arrayList =new ArrayList();
arrayList.Add(1);
arrayList.Add(2);
arrayList.Add(3);
Console.WriteLine(arrayList.BinarySearch(2));
--->
1
public virtual void Clear();
官方摘要:从 System.Collections.ArrayList 中移除所有元素。
简单理解:从 ArrayList 中移除所有的元素。
代码示例:
ArrayList arrayList =new ArrayList();
arrayList.Add(1);
arrayList.Add(2);
arrayList.Add(3);
arrayList.Clear();
foreach (var item in arrayList)
{
Console.WriteLine(item);
}
Console.WriteLine(arrayList.Count);
--->
0
public virtual bool Contains(object item);
官方摘要:确定某元素是否在 System.Collections.ArrayList 中。
参数说明:
- item:要在System.Collections.ArrayList 中定位的System.Object 。 该值可以为 null。
返回结果:如果在 System.Collections.ArrayList中找到 item,则为true;否则为 false。
简单理解:判断某个元素是否在 ArrayList 中。
代码示例:
ArrayList arrayList =new ArrayList();
arrayList.Add(1);
arrayList.Add(2);
arrayList.Add(3);
Console.WriteLine(arrayList.Contains(3));
--->
True
public virtual void CopyTo(int index, Array array, int arrayIndex, int count);
官方摘要:从目标数组的指定索引处开始,将 System.Collections.ArrayList 中某个范围的元素复制到兼容的一维数组 System.Array。
参数说明:
- index:复制即从源 System.Collections.ArrayList 中从零开始的索引开始。
- array:一维 System.Array,它是从 System.Collections.ArrayList 复制的元素的目标。 System.Array 必须具有从零开始的索引。
- arrayIndex:array 中从零开始的索引,从此处开始复制。
- count:要复制的元素数。
简单理解:将指定元素复制到一维数组中。
代码示例:(更多重载,不一一列出)
ArrayList arrayList =new ArrayList();
arrayList.Add(1);
arrayList.Add(2);
arrayList.Add(3);
int[] arr = new int[3];
arrayList.CopyTo(1,arr,1,2);
foreach (var item in arr)
{
Console.WriteLine(item);
}
--->
0
2
3
public virtual ArrayList GetRange(int index, int count);
官方摘要:返回一个 System.Collections.ArrayList,它表示源 System.Collections.ArrayList 中的元素子集。
参数说明:
- index:范围开始处的从零开始的 System.Collections.ArrayList 索引。
- count:范围中的元素数。
返回结果:一个 System.Collections.ArrayList,它表示源 System.Collections.ArrayList 中的元素子集。
简单理解:返回一个 ArrayList,表示源 ArrayList 中元素的子集。
代码示例:
ArrayList arrayList1 =new ArrayList();
arrayList1.Add(1);
arrayList1.Add(2);
arrayList1.Add(3);
ArrayList arrayList2 = arrayList1.GetRange(1,2);
foreach (var item in arrayList2)
{
Console.WriteLine(item);
}
--->
2
3
public virtual int IndexOf(object value, int startIndex, int count);
官方摘要:搜索指定的 System.Object,并返回 System.Collections.ArrayList 中从指定索引开始,并包含指定元素数的元素范围中第一个匹配项的从零开始的索引。
参数说明:
- value:要在System.Collections.ArrayList 中定位的System.Object。 该值可以为 null。
- startIndex:从零开始的搜索的起始索引。 空列表中 0(零)为有效值。
- count:要搜索的部分中的元素数。
返回结果:如果在 System.Collections.ArrayList 中从 startIndex 开始并包含 count 个元素的元素范围内找到 value 的第一个匹配项,则为该项的从零开始的索引;否则为 -1。
简单理解:返回某个值在 ArrayList 中第一次出现的索引,索引从零开始。
代码示例:(更多重载,不一一列出)
ArrayList arrayList = new ArrayList();
arrayList.Add("aa");
arrayList.Add("bb");
arrayList.Add("cc");
Console.WriteLine(arrayList.IndexOf("bb",0,2));
--->
1
public virtual void Insert(int index, object value);
官方摘要:将元素插入 System.Collections.ArrayList 的指定索引处。
参数说明:
- index:应插入 value 的从零开始的索引。
- value:要插入的 System.Object。 该值可以为 null。
简单理解:在 ArrayList 的指定索引处,插入一个元素。
代码示例:
ArrayList arrayList = new ArrayList();
arrayList.Add("aa");
arrayList.Add("bb");
arrayList.Add("cc");
arrayList.Insert(3,"dd");
foreach (var item in arrayList)
{
Console.WriteLine(item);
}
--->
aa
bb
cc
dd
public virtual void InsertRange(int index, ICollection c);
官方摘要:将集合中的元素插入 System.Collections.ArrayList 的指定索引处。
参数说明:
- index:应在此处插入新元素的从零开始的索引。
- c:System.Collections.ICollection,应将其元素插入到 System.Collections.ArrayList 中。 集合本身不能为 null,但它可以包含为 null 的元素。
简单理解:在 ArrayList 的指定索引处,插入某个集合的元素。
代码示例:
ArrayList arrayList1 = new ArrayList();
arrayList1.Add("aa");
arrayList1.Add("bb");
arrayList1.Add("cc");
ArrayList arrayList2 = new ArrayList();
arrayList2.InsertRange(0, arrayList1);
foreach (var item in arrayList2)
{
Console.WriteLine(item);
}
--->
aa
bb
cc
public virtual int LastIndexOf(object value, int startIndex);
官方摘要:搜索指定的 System.Object,并返回 System.Collections.ArrayList 中从第一个元素到指定索引这部分元素中最后一个匹配项的从零开始索引。
参数说明:
- value:要在System.Collections.ArrayList 中定位的System.Object。 该值可以为 null。
- startIndex:向后搜索的从零开始的起始索引。
返回结果:如果找到,则返回在 System.Collections.ArrayList 中从第一个元素到 startIndex 的元素范围内找到 value 的最后一个匹配项的从零开始的索引;否则为 -1。
简单理解:返回某个值在 ArrayList 中第一次出现的索引,索引从后端开始。
代码示例:(更多重载,不一一列出)
ArrayList arrayList = new ArrayList();
arrayList.Add("aa");
arrayList.Add("bb");
arrayList.Add("cc");
Console.WriteLine(arrayList.LastIndexOf("cc",2));
--->
2
public virtual void Remove(object obj);
官方摘要:从 System.Collections.ArrayList 中移除特定对象的第一个匹配项。
参数说明:
- obj:要从 System.Object 移除的 System.Collections.ArrayList。 该值可以为 null。
简单理解:从 ArrayList 中移除第一次出现的指定对象。
代码示例:
ArrayList arrayList = new ArrayList();
arrayList.Add("aa");
arrayList.Add("bb");
arrayList.Add("cc");
arrayList.Remove("bb");
foreach (var item in arrayList)
{
Console.WriteLine(item);
}
--->
aa
cc
public virtual void RemoveAt(int index);
官方摘要:移除 System.Collections.ArrayList 的指定索引处的元素。
参数说明:
- index:要移除的元素的从零开始的索引。
简单理解:移除 ArrayList 的指定索引处的元素。
代码示例:
ArrayList arrayList = new ArrayList();
arrayList.Add("aa");
arrayList.Add("bb");
arrayList.Add("cc");
arrayList.RemoveAt(1);
foreach (var item in arrayList)
{
Console.WriteLine(item);
}
--->
aa
cc
public virtual void RemoveRange(int index, int count);
官方摘要:从 System.Collections.ArrayList 中移除一定范围的元素。
参数说明:
- index:要移除的元素范围的从零开始的起始索引。
- count:要移除的元素数。
简单理解:从 ArrayList 中移除某个范围的元素。
代码示例:
ArrayList arrayList = new ArrayList();
arrayList.Add("aa");
arrayList.Add("bb");
arrayList.Add("cc");
arrayList.RemoveRange(0,2);
foreach (var item in arrayList)
{
Console.WriteLine(item);
}
--->
cc
public virtual void Reverse(int index, int count);
官方摘要:将指定范围中元素的顺序反转。
参数说明:
- index:要反转的范围的从零开始的起始索引。
- count:要反转的范围内的元素数。
简单理解:逆转 ArrayList 中元素的顺序。
代码示例:(其他重载,不一一列出)
ArrayList arrayList = new ArrayList();
arrayList.Add("aa");
arrayList.Add("bb");
arrayList.Add("cc");
arrayList.Reverse(0,2);
foreach (var item in arrayList)
{
Console.WriteLine(item);
}
--->
bb
aa
cc
public virtual void SetRange(int index, ICollection c);
官方摘要:复制 System.Collections.ArrayList 中一个子集合的元素。
参数说明:
- index:从零开始的 System.Collections.ArrayList 索引,从此索引处开始复制 c 的元素。
- c:System.Collections.ICollection,它的元素要复制到 System.Collections.ArrayList。 集合本身不能为 null,但它可以包含为 null 的元素。
简单理解:复制某个集合的元素到 ArrayList 中某个范围的元素上。
代码示例:
ArrayList arrayList1 = new ArrayList() { "aaa" , "bbb", "ccc" };
ArrayList arrayList2 = new ArrayList(4) { "aa", "bb", "cc" ,"dd" };
arrayList2.SetRange(0, arrayList1);
foreach (var item in arrayList2)
{
Console.WriteLine(item);
}
--->
aaa
bbb
ccc
dd
public virtual void Sort();
官方摘要:对整个 System.Collections.ArrayList 中的元素进行排序。
简单理解:对 ArrayList 中的元素进行排序。
代码示例:(更多重载,不一一列出)
ArrayList arrayList = new ArrayList() { 0,5,8,7,4,1};
arrayList.Sort();
foreach (var item in arrayList)
{
Console.WriteLine(item);
}
--->
0
1
4
5
7
8
public virtual object[] ToArray();
官方摘要:将 System.Collections.ArrayList 的元素复制到新 System.Object 数组中。
返回结果:一个包含 System.Collections.ArrayList 的元素副本的 System.Object 数组。
简单理解:将ArrayList 中的元素复制到数组中。
代码示例:
ArrayList arrayList = new ArrayList() { 0,5,8,7,4,1};
object[]arr = arrayList.ToArray();
foreach (var item in arr)
{
Console.WriteLine(item);
}
--->
0
5
8
7
4
1
public virtual Array ToArray(Type type);
官方摘要:将 System.Collections.ArrayList 的元素复制到新的指定元素类型数组中。
参数说明:
- type:要创建和复制元素的目标数组的元素 System.Type。
返回结果:包含 System.Collections.ArrayList 的元素副本的指定元素类型数组。
简单理解:将ArrayList 中的元素复制到指定类型的数组中。
代码示例:
ArrayList arrayList = new ArrayList() { 0,5,8,7,4,1};
int[] arr = (int[])arrayList.ToArray(typeof(int));
foreach (var item in arr)
{
Console.WriteLine(item);
}
--->
0
5
8
7
4
1
public virtual void TrimToSize();
官方摘要:将容量设置为 System.Collections.ArrayList 中元素的实际数目。
简单理解:设置容量为 ArrayList 中元素的实际个数。
代码示例:
ArrayList arrayList = new ArrayList(10) { 0,5,8,7,4,1};
Console.WriteLine(arrayList.Count);
Console.WriteLine(arrayList.Capacity);
arrayList.TrimToSize();
Console.WriteLine(arrayList.Count);
Console.WriteLine(arrayList.Capacity);
--->
6
10
6
6