一、数组、ArrayList 和 List<>
数组、ArrayList 和 List,都被用于储存一组数据(对象)。
1、数组(非泛型集合)
数据类型[] 数组名 = new 数据类型[数组长度]
如: string[] array = new string[3];
实例化数组的时候,必须定义数组长度。若不知要储存数据的数量,过度设置数组长度会造成资源浪费。为解决这个问题,推出了ArrayList对象来解决这些问题。
2、ArrayList(非泛型集合)
ArrayList 对象名 = new ArrayList();
ArrayList实例化时,可以不需要定义容量。 ArrayList的容量是动态的,会随着存入数据的数量动态增加容量。
注意到,实例化ArrayList时,没有声明数据类型,ArrayList中插入不同类型的元素是被允许的。ArrayList会把所有插入的元素当做object类型来处理,在实际使用中很容易发生数据类型不匹配的错误,因此ArrayList不是类型安全的。而且在检索ArrayList时通常会发生装箱,拆箱的操作,这会浪费系统资源。
属性或方法 | 作用 |
---|---|
int Add(object value) | 向集合中添加 object 类型的元素,返回元素在集合中的下标 |
void AddRange(ICollection c) | 向集合中添加另一个集合 c |
Capacity | 属性,用于获取或设置集合中可以包含的元素个数 |
void Clear() | 从集合中移除所有元素 |
bool Contains(object item) | 判断集合中是否含有 item 元素,若含有该元素则返回 True, 否则返回 False |
void CopyTo(Array array) | 从目标数组 array 的第 0 个位置开始,将整个集合中的元素复制到类型兼容的数组 array 中 |
void CopyTo(Array array,int arraylndex) | 从目标数组 array 的指定索引 arraylndex 处,将整个集合中的元素赋值到类型兼容的数组 array 中 |
void CopyTo(int index,Array array,int arrayIndex,int count) | 从目标数组 array 的指定索引 arrayindex 处,将集合中从指定索引 index 开始的 count 个元素复制到类型兼容的数组 array 中 |
Count | 属性,用于获取集合中实际含有的元素个数 |
int IndexOf(object value) | 返回 value 值在集合中第一次出现的位置 |
int IndexOf(object value,int startIndex) | 返回 value 值在集合的 startindex 位置开始第一次出现的位置 |
int IndexOf(object value,int startIndex,int count) | 返回 value 值在集合的 startindex 位置开始 count 个元素中第一次出现的位置 |
int LastIndexOf(object value) | 返回 value 值在集合中最后一次出现的位置 |
int LastIndexOf(object value,int startIndex) | 返回 value 值在集合的 startindex 位置开始最后一次出现的位置 |
int LastIndexOf(object value,int startIndex,int count) | 入元素 value值在集合的 startindex 位置开始 count 个元素中最后一次出现的位置 |
void Insert(int index,object value) | 返回 value 向集合中的指定索引 index 处插 |
void InsertRange(int index,ICollection c) | 向集合中的指定索引 index 处插入一个集合 |
void Remove(object obj) | 将指定兀素 obj 从集合中移除 |
void RemoveAt(int index) | 移除集合中指定位置 index 处的元素 |
void RemoveRange(int index,int count) | 移除集合中从指定位置 index 处的 count 个元素 |
void Reverse() | 将集合中的元素顺序反转 |
void Reverse(int index,int count) | 将集合中从指定位置 index 处的 count 个元素反转 |
void Sort() | 将集合中的元素排序,默认从小到大排序 |
void Sort(IComparer comparer) | 将集合中的元素按照比较器 comparer 的方式排序 |
void Sort(int index,int count,IComparer comparer) | 将集合中的元素从指定位置 index 处的 count 个元素按照比较器 comparer 的方式排序 |
void TrimToSize() | 将集合的大小设置为集合中元素的实际个数 |
3、List<>(泛型集合)
List<>类就是ArrayList类的泛型等效类。它的大部分用法与ArrayList相似。
在声明List集合时,我们同时需要为其声明List集合内数据的对象类型。
List<数据类型> 对象名 = new List<数据类型>;
二、Queue队列
Queue队列是一种先进先出,后进后出的数据结构。
Queue 对象名 = new Queue();
使用无参数构造器创建 Queue 的实例,集合的容量是默认初始容量 32 个元素,使用默认的增长因子 。Queue队列的容量会自动扩容。
属性或方法 | 作用 |
---|---|
Count | 属性,获取 Queue 实例中包含的元素个数 |
void Clear() | 清除 Queue 实例中的元素 |
bool Contains(object obj) | 判断 Queue 实例中是否含有 obj 元素 |
void CopyTo(Array array, int index) | 将 array 数组从指定索引处的元素开始复制到 Queue 实例中 |
object Dequeue() | 移除并返回位于 Queue 实例开始处的对象 |
void Enqueue(object obj) | 将对象添加到 Queue 实例的结尾处 |
object Peek() | 返回位于 Queue 实例开始处的对象但不将其移除 |
object[] ToArray() | 将 Queue 实例中的元素复制到新数组 |
void TrimToSize() | 将容量设置为 Queue 实例中元素的实际数目 |
IEnumerator GetEnumerator() | 返回循环访问 Queue 实例的枚举数 |
三、Stack栈
Stack栈 是一种先进后出,后进先出的数据结构。
Stack 对象名 = new Stack();
属性或方法 | 作用 |
---|---|
Push(object obj) | 向栈中添加元素,也称入栈 |
object Peek() | 用于获取栈顶元素的值,但不移除栈顶元素的值 |
object Pop() | 用于移除栈顶元素的值,并移除栈顶元素 |
Clear() | 从 Stack 中移除所有的元素 |
Contains(object obj) | 判断某个元素是否在 Stack 中 |
object[] ToArray() | 复制 Stack 到一个新的数组中 |
四、Hashtable哈希表(非泛型集合)
哈希表使用键值对(key \ value)的方式存放值。换句话说,在 Hashtable 中存放了两个数组,一个数组用于存放 key 值,一个数组用于存放 value 值。键必须是唯一的,而值不需要唯一的 ,key 和value都是object。
此外,还提供了根据集合中元素的 key 值查找其对应的 value 值的方法。
Hashtable 对象名 = new Hashtable ();
属性或方法 | 作用 |
---|---|
Count | 集合中存放的元素的实际个数 |
void Add(object key,object value) | 向集合中添加元素 |
void Remove(object key) | 根据指定的 key 值移除对应的集合元素 |
void Clear() | 清空集合 |
ContainsKey (object key) | 判断集合中是否包含指定 key 值的元素 |
ContainsValue(object value) | 判断集合中是否包含指定 value 值的元素 |
static void Main(string[] args)
{
Hashtable hash = new Hashtable();
键值对集合的“键”一定不能重复。(唯一)
hash.Add(1, "飞机");
hash.Add("xyz",new Person() { Name="猪仔"});
判断一个集合中是否存在某个键
if (hash.ContainsKey("xyz"))
{
Console.WriteLine("存在");
}
判断键值对中是否存在某个值
if (hash.ContainsValue("飞机"))
{
Console.WriteLine("存在2");
}
根据键获取值
Console.WriteLine(hash[1].ToString());
Person pp =hash["xyz"] as Person;
Console.WriteLine(pp.Name);
遍历Hashtable
1.遍历键
foreach (object item in hash.Keys)
{
Console.WriteLine("键{0},值{1}",item,hash[item]);
}
2.遍历值
foreach (object item in hash.Values)
{
Console.WriteLine("值:{0}",item);
}
3.遍历键值对
foreach (DictionaryEntry kv in hash)
{
Console.WriteLine("键:{0} 值:{1}",kv.Key,kv.Value);
}
Console.ReadKey();
}
————————————————
版权声明:本文为CSDN博主「我家有大脸」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Tianwen55/article/details/107102834
五、Dictionary字典(泛型集合)
Dictionary字典同哈希表一样,根据键进行的键值对的集合,不同的是对键值对进行了类型限定。
Dictionary<键类型, 值类型> 对象名 = new Dictionary<键类型, 值类型>();