C#中的集合

                                 集合

集合包括:ArrayList,Hashtable(哈希表),List,Dictionary(字典)。

1、ArrayList

定义:ArrayList mylist=new ArrayList();  //ArrayList 可变长度数组,使用类似于数组

添加数据: ArrayList array = new ArrayList();
            array.Add("hello");
            array.Add(10);
            array.Add("9.9");
            array.Add(DateTime.Now);
            array.Add("hello");
            array.Add(10);
            array.Add(9.9);
            array.Add(DateTime.Now);
            array.Add("hello");
            array.Add(10);
            array.Add(9.9);
            array.Add(DateTime.Now);
            //将数组添加到集合中,数组中每一个元素都作为了集合的一个元素
            array.AddRange(new string[2] { "ab", "cd" });
            //count获取的是集合中实际的个数,caoacity获取的是集合的容量
            Console.WriteLine(array.Count);//个数
            Console.WriteLine(array.Capacity);//容量
            //不会删除集合中相同的元素,只会删除一个,而且从第一个开始删除
  删除数据:array.Remove(9.9);
            //for (int i = 0; i < 9; i++)
            //{
            //    //为什么会报错,因为集合中的数量会动态更新的,删除一个则count属性的值就会更新
            //    array.RemoveAt(i);
            //}
            for (int i = 0; i < 6; i++)
            {
                //为什么会报错,因为集合中的数量会动态更新的,删除一个则count属性的值就会更新
                array.RemoveAt(i);
            }
            //虽然集合中所生数组个数不多,但是数组容量还是很大,造成内存空间浪费,这是可以手动缩小集合大小,其实就是在内存中新建一个小数组,将数据拿过来,将原来数组释放掉。
            array.TrimToSize();(缩小集合大小)
            Console.WriteLine(array.Count);//个数
            Console.WriteLine(array.Capacity);//容量
            Console.ReadKey();
遍历数组: for (int i = 0; i < array.Count; i++)
            {
                Console.WriteLine(array[i]);
            }

2、Hashtable(哈希表)

在ArrayList中如果要查找一个元素,必须要遍历数组,假如数组有一万条数据会很耗内存的。所以我们可以定义Hashtable(哈希表)。
定义: Hashtable table = new Hashtable();
            //当我们执行添加操作时,发现两个参数都是object类型,这就意味着对象添加到集合中之后就会被转换成object类型,就是进行了装箱操作。
添加数据:  table.Add("张三", 20);  //添加的数据有Key和Value。方便查找数据
            table.Add("李四", 21);
            table.Add("王五", 22);
            table.Add("赵六", 23);
            table.Add("陈麻子", 24);


 #region 修改和删除
            table["陈麻子"] = 25;
            Console.WriteLine("陈麻子的年龄为{0}", table["陈麻子"]);
            table.Remove("陈麻子");

           foreach (DictionaryEntry item in table)
           {
               Console.WriteLine("{0}的年龄为{1}", item.Key, item.Value);
           }
            #endregion

#region 在hashtable中寻找需要的元素
            foreach (DictionaryEntry item in table)
            {
                //当我们执行读取操作的时候,因为每个键值对中的无论键还是值都曾经被转换成object类型,所以取出来的时候也是这个类型,要进行比较,就需要转换成存进去之前的类型
               if (Convert.ToString(item.Key) == "王五")
               {
                   Console.WriteLine("王五的年龄为{0}", item.Value);
               }
           }
            #endregion

 A、用Hashtable声明的对象中的Key和Value是结构DictionaryEntry中的方法,所以Hashtable声明的对象的类型是DictionaryEntry,
所以foreach中的类型写为DictionaryEntry


 B、如果想用foreach遍历,对象要实现了IEnumerable这个接口

 

3、List是ArrayList的升级版,减少了装箱和拆箱的操作。ArrayList可以添加任何类型的数据,而List只能添加定义时类型的数据


//ArrayList list = new ArrayList();

            //因为List集合限定了存放数据的类型,导致防止内容没有ArrayList方便,但是取数据方便,而且效率高。为什么?因为既然限定了数据的类型,那么在存放数据的时候就省去了装箱的操作,同样取数据的时候因为事先就知道是什么类型,所以也省去了拆线操作。

定义:List<int> list = new List<int>();
添加数据:  list.Add(10);
            list.Add(11);
            list.Add(12);
            list.Add(3);
方法:Sort()(排序从小到大)、Max()、Min()、Sum()…

删除和更改数据与以上类型基本相同。

遍历和ArrayList基本相同,可以用for也可以用foreach。用foreach时类型不用更改。用var

4、Dictionary(字典)是Hashtable(哈希表)的升级版,和List是ArrayList的升级版的原因差不多。

定义: Dictionary<string, int> dic = new Dictionary<string, int>();
 添加数据: dic.Add("张三", 20);
            dic.Add("李四", 21);
            dic.Add("王五", 22);
            dic.Add("赵六", 23);
            dic.Add("陈麻子", 24);

            #region 修改
            dic["陈麻子"] = 25;
            #endregion

            #region 便利输出值
            //foreach (int item in dic.Values)
            //{
            //    Console.WriteLine(item);
            //}
            #endregion
            #region 遍历输出键
            //foreach (string item in dic.Keys)
            //{
            //    //Console.WriteLine(item);
            //    Console.WriteLine("{0}的年龄是{1}",item,dic[item]);
            //}
            #endregion

            
            #region 遍历输出键值对
            foreach (KeyValuePair<string,int> item in dic)
            {
                Console.WriteLine("{0}的年龄是{1}",item.Key,item.Value);
            }
            #endregion

遍历输出Dictionary(字典)时,类型需要更改为KeyValuePair<string,int>类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值