C# 集合类型总结,ArrayList,Hastable,List<> 泛型,Dictionary<A, B> 字典集合

C# 集合类型总结

前言

装箱、拆箱
装箱:就是将值类型转换为引用类型。
拆箱:将引用类型转换为值类型。
看两种类型是否发生了装箱或者拆箱,要看,这两种类型是否存在继承关系。

ArrayList 列表集合和Hastable 字典集合在操作时发生了装箱或者拆箱,导致效率比较低。而List<int> 列表泛型集合和Dictionary<int, string> 字典泛型集合一般没有发生装箱或者拆箱,效率比较高

1. ArrayList 列表集合

优点,长度可以改变,可以存储任意类型

缺点,取出元素使用时比较麻烦,要转换类型

所需命名空间

using System.Collections;
//创建了一个集合对象
ArrayList list = new ArrayList();

1.1 ArrayList集合方法(增删查改)

【增】

//add()
list.Add(1);
list.Add(true);//也可以增添集合类型
//AddRange() 当以数组列表增添元素时可以使用这个
list.AddRange(new string[]{
    
    "z","b"});//

使用AddRange() 这个时,如例子list增加两个元素,不是和add()一样增加一个数组元素

使用AddRange() 这个时,在打印列表时方便,不用另外使用循环打印数组等类型了

【删】

//list.Clear();//清空所有元素
//list.Remove(true);//删除单个元素 写谁就删谁
//list.RemoveAt(0);//根据下标去删除元素
//list.RemoveRange(0, 3);//根据下标去移除一定范围的元素

【查】

//bool b = list.Contains("abc");//判断是否包含某个指定的元素
//int len = list.Count //列表长度,元素的数量
//list.Capacity//表示这个集合中可以包含的元素的个数

ArrayList集合的长度问题

每次集合中实际包含的元素个数(count)超过了可以包含的元素的个数(capcity)的时候,
集合就会向内存中申请多开辟一倍的空间,来保证集合的长度一直够用。

【改】

list[i] = xxx
// list.Sort();//升序排列
//list.Reverse();//反转
//list.Insert(1, "插入的");//在指定的位置插入一个元素
//list.InsertRange(0, new string[] { "张三", "李四" });//在指定的位置插入一个集合

1.2 遍历ArrayList列表

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

对于Console.WriteLine(list[i])打印列表元素,可以直接打印int,double,bool,string,char,decimal。

如果是对象,数组打印的是类的命名空间。如果要打印这些成员,要另外用循环打印,可以用 is关键字判断类型

2. Hastable 字典集合

Hastable 键值对集合 字典 孙 sun—孙
在键值对集合当中,我们是根据键去找值的。
键值对对象[键]=值;
键值对集合当中,键必须是唯一的而值是可以重复的

Hashtable ht = new Hashtable();
ht.Add(1, "张三");//1是键(可以是任意类型),"张三"是值

2.1 Hastable集合方法(增删查改)

【增】

//add()
ht.Add("5", "张三");
ht["6"] = "新来的";

【删】

ht.Remove("3");//移除"3"这个键值对
//ht.Clear(); //移除集合中所有的元素

【查】

//bool b = ht.ContainsKey("abc")//判断是否有这个键

【改】

ht["abc"] = "哈哈哈";

2.2 遍历Hastable字典(foreach循环)

foreach (var item in ht.Keys)
{
    
    
    Console.WriteLine("键是{0},值是{1}", item, ht[item]);
}

c#是一门强类型语言:在代码当中,必须对每一个变量的类型有一个明确的定义

//var:根据值能够推断出来类型

var n = 15;
Console.WriteLine(n.GetType());//System.Int32

说明var根据15推断出n是int类型

缺点,用var定义变量一定要赋初值。而且赋值的类型就决定变量的类型,不能随意赋值其他类型了。

3. List<> 泛型列表集合

有固定类型的List集合

优点,在使用的时候比List列表方便很多,长度可变,效率高很多

缺点,只能装固定类型了,比如下面的只能装int类型

List<int> list = new List<int>();

3.1 List<>和数组互相转换(重要)

//
int[] nums = list.ToArray();
string[] str = listStr.ToArray();
//
List<int> list = nums.ToList();

3.2 List<> 集合方法(增删查改)

使用上和List列表集合基本一致,只是只能装固定类型数据

【增】

//add()
list.Add(1);
list.AddRange(new int[] {
    
     1, 2, 3, 4, 5, 6 });

【删】

list.Clear();//清空所有元素
list.Remove(true);//删除单个元素 写谁就删谁
list.RemoveAt(0);//根据下标去删除元素
list.RemoveRange(0, 3);//根据下标去移除一定范围的元素

【查】

bool b = list.Contains("abc");//判断是否包含某个指定的元素
int len = list.Count //列表长度,元素的数量
list.Capacity//表示这个集合中可以包含的元素的个数

【改】

list[i] = xxx
list.Sort();//升序排列
list.Reverse();//反转
list.Insert(1, "插入的");//在指定的位置插入一个元素
list.InsertRange(0, new string[] {
    
     "张三", "李四" });//在指定的位置插入一个集合

3.3 遍历List<> 列表集合

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

4. Dictionary<A, B> 字典集合

除了固定了键值对类型,其他和Hashtable类型一致

Dictionary<int, string> dic = new Dictionary<int, string>();

4.1 Dictionary集合方法(增删查改)

【增】

//add()
dic.Add(1, "张三");
dic.Add(2, "李四");
dic[1] = "新来的";

【删】

dic.Remove("3");//移除"3"这个键值对
//dic.Clear(); //移除集合中所有的元素

【查】

//bool b = dic.ContainsKey("abc")//判断是否有这个键

【改】

dic[2] = "哈哈哈";

4.2 遍历Dictionary字典(foreach循环)(重要)

//a 推荐
foreach (KeyValuePair<int,string> kv in dic)
{
    
    
    Console.WriteLine("{0}---{1}",kv.Key,kv.Value);
}
//b
foreach (var item in ht.Keys)
{
    
    
    Console.WriteLine("键是{0},值是{1}", item, ht[item]);
}

猜你喜欢

转载自blog.csdn.net/qq_38463737/article/details/113617683