C#中常用的泛型集合和非泛型集合(ArrayList、Hashtable、List、Dictionary)

前言

      集合(Collection)类服务于不同的目的,如为元素动态分配内存,基于索引访问列表项等等。这些类创建 Object 类的对象的集合。在 C# 中,Object 类是所有数据类型的基类。

1. ArrayList 非泛型集合

      ArrayList集合可以存储任意类型,集合长度可以自动增长

	//命名空间
	using System.Collections
	//创建ArrayList集合
	 ArrayList list = new ArrayList();	
	 
	 /* 添加元素  可以添加任意类型 */
	 list.Add(true);	//布尔类型
	 list.Add(1);		//数字类型
	 list.Add("小源");	//字符串类型
	 list.Add('男');	//字符类型
	 list.Add(1.2);		//浮点类型
	 list.AddRange(new int[] {1,2,3,4,5,6});	//数组类型
	
	 /* 删除元素 */
	 list.Clear();			 //清空集合中所有元素
	 list.Remove(true);		 //删除指定元素名的元素
	 list.RemoveAt(0);		 //删除指定索引的元素
	 list.RemoveRange(0, 3); //根据下标去移除一定范围的元素
	 
	 /* 插入元素 */
	 list.Insert(1,"插入的内容");	//在指定的位置插入一个元素
	 list.InsertRange(0,new string[]{"张三","李四","王五"});	//在指定的位置插入一个数组
	
	/* 修改元素 */
	list[0]="520"; 

	 /* 查询元素 */
	 bool iRet = list.Contains('男'); //判断是否包含某个指定的元素
	 
	 /* 遍历ArrayList集合 通过for或foreach遍历集合 */
	 for(int i=0;i<list.Count;i++)
	 {
	 	Console.WriteLine(list[i]);
	 }
	 foreach(object time in list)
	 {
	 	Console.WriteLine(time);
	 }

2. Hashtable 非泛型集合

      Hashtable集合 通常成为哈希表,根据键(Key) 可以查找到相应的值(Value)

	//命名空间
	using System.Collections
	/* 创建Hashtable 哈希表集合 */
	Hashtable ht = new Hashtable();
	
	/* 添加元素    不能添加重复键Key,但可以有重复的值Value */
	ht.Add("S10001","小孙");
	ht.Add("S10002","小王");
	
	/* 删除元素 */  
	ht.Remove(key);		//通过键删除Key
	ht.Clear();			//移除所有元素
	
	/* 查询元素 */
	bool iRet = ht.Contains(key);	//判断哈希表是否包含特定键key

	/* 遍历Hashtable 哈希表集合 */
	/* 遍历键 */
    Console.WriteLine();
    foreach (string key in ht.Keys)
    {
        Console.WriteLine(key);
    }
    Console.WriteLine();
    /* 遍历值 */
    foreach (string values in ht.Values)
    {
        Console.WriteLine(values);
    }
    Console.WriteLine();
    /* 遍历键值 */
    foreach (DictionaryEntry de in ht)
    {
        Console.WriteLine(de.Value);
        Console.WriteLine(de.Key);
    }

3. List< T > 泛型集合

List 泛型集合描述:

  1. 不会强行对值类型进行装箱和拆箱。
  2. 可以使用一个整数索引访问此集合中的元素;索引从 零开始。
  3. 执行得更好并且是类型安全的。
  4. 可以接收null空引用(VB中的Nothing)。
  5. 允许重复元素。
	//命名空间
	using System.Collections.Generic;
	/* 创建泛型集合 类型中可以是任意类型 */
	List<类型> 集合名 = new List<类型>();
	
	/* 添加元素 */
	集合名.Add(Value);	
	
	/* 删除元素 */
	集合名.Remove(GameObject item);		//清空集合指定的子元素
	集合名.RemoveAt(索引);				//删除指定索引位置的数据
	集合名.Clear();						//清空集合
	
	/* 查询元素 */
	集合名[索引];		//取出指定索引位置的数据
	集合名.Count;		//集合的长度

	/* 修改元素 */
	集合名[索引]=新值;	//给指定索引的数据重新赋值

	/* 遍历List<>泛型集合 */
    foreach(类型 time in 集合名)
    {
        Console.WriteLine(time);
    }
    for(int i = 0; i < 集合名.Count; i++)
    {
        Console.WriteLine(集合名[i]);
    }

4. Dictionary<T,V> 字典泛型集合

Dictionary泛型集合描述:

  1. 从一组键(Key)到一组值(Value)的映射,每一个添加项都是由一个值及其相关连的键组成
  2. 任何键都必须是唯一的
  3. 键不能为空引用null(VB中的Nothing),若值为引用类型,则可以为空值
  4. Key和Value可以是任何类型(string,int,custom class 等)
	//引用命名空间
	using System.Collections.Generic
	/* 创建Dictionary集合 */
	Dictionary<键类型,值类型> 集合名 = new Dictionary<类型,类型>();
	
	/* 添加数据  键必须是键的数据类型,值必须是值的数据类型*/
	集合名.Add(,);
	
	/* 删除数据 通过键删除元素*/
	集合名.Remove(); 
	
	/* 通过Key查询元素是否存在 */
	 bool iRet = 集合名.ContainsKey();
	
	/* 遍历字典集合 */
	/* 遍历键*/
	foreach (键类型 values in 集合名.Keys)
    {
        Console.WriteLine(values);
    }
    /* 遍历值 */
    foreach (值类型 values in 集合名.Values)
    {
        Console.WriteLine(values.具体属性());
    }
    /* 遍历键值*/
    foreach (KeyValuePair<键类型,值类型> values in 集合名)
    {
        Console.WriteLine(values.Key);
        Console.WriteLine(values.Value.具体属性());
    }

5. 非泛型集合和泛型集合对比

异同点List< T >ArrayList
不同点添加元素时类型严格检查可以增加任何类型
添加和读取值类型元素时,无需装箱拆箱添加和读取值类型元素时,需要装箱拆箱
相同点通过索引访问集合的元素
添加对象方法相同
通过索引删除元素
异同点Dictionary< K,V >Hashtable
不同点增加元素时类型严格检查可以增加任何类型
无需装箱拆箱需要装箱拆箱
相同点通过K获取Value
添加对象方法相同
遍历方法相同
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自学之路←_←

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值