c#集合与泛型集合

  • 集合
  1. 集合的命名空间:using System.Collections;
  2. 泛型的命名空间:using System.Collections.Generic; 命名空间包含定义泛型集合的接口和类,泛型集合允许用户创建强类型集合,它能提供比泛型集合更好的类型安全性和性能。
  3. 集合的事例代码:
   ArrayList list = new ArrayList();
            List<string> arr = new List<string>();
            //添加:
            Console.WriteLine("修改之前");
            //1.添加单个数据
            list.Add("张三");
            //2.批量添加数据
            list.AddRange(new string[] {"李四","王五","1","2","2","9" });
            //3.指定下标添加数据
            list.Insert(1,"嘴三半");
            //在指定位置批量添加多个数据
            list.InsertRange(2,new string[] {"王三半1","宫向南"});
            for (int i = 0; i < list.Count; i++)
            {
                Console.WriteLine(list[i]);
            }
            Console.WriteLine("--------------------------------");
            删除:
            //  //1.删除单条数据
            //  list.Remove("张三");
            //  //2.批量删除多条数据
            //  list.RemoveRange(2 ,3);
            //  //3.指定删除下标元素
            //  //list.RemoveAt(1);
            //  for (int i = 0; i < list.Count; i++)
            //  {
            //      Console.WriteLine(list[i]);
            //  }
            //  //4.删除全部元素
            //  list.Clear();
            Console.WriteLine("修改之后");
            //修改数据:
            //1.通过下标来修改一个元素
            list[0] = "张四";
            //2.批量修改数据
            list.SetRange(2,new string[] {"1" ,"2"});

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


            //查询数据:
            //1.用foreach循环查询数据
            //foreach (var item in list)
            //{
            //    Console.WriteLine(item);
            //}
            //2.用for循环查询数据

栈 stack 先进后出
队列 queue 先进先出 
        static void Main(string[] args)
        {
            Console.WriteLine("---------栈--------");
            Stack s = new Stack();
            Console.WriteLine();
            //向栈存储一些元素 压栈
           
            s.Push("a");
            s.Push("b");
            s.Push("c");

            //要取栈里面的元素  获取栈顶的元素
            Console.WriteLine("获取栈顶的元素:");
            object obj = s.Peek();
            Console.WriteLine(obj);

            //将栈顶的元素出栈,返回刚刚出栈的元素
            Console.WriteLine("返回出栈的元素:");
            object p = s.Pop();
            Console.WriteLine(p);

            //输出栈里面的全部元素
            Console.WriteLine("循环输出全部的元素:");
            foreach (object obj1 in s) {
                Console.WriteLine(obj1);
            }


            Console.WriteLine("--------队列-------");
            Queue q = new Queue();
            Console.WriteLine();
            //将元素依次添加到队列中:
            q.Enqueue("a");
            q.Enqueue("b");
            q.Enqueue("c");

            //获取栈顶的元素:
            Console.WriteLine("获取栈顶的元素");
            object equ = q.Peek();
            Console.WriteLine(equ);

            //将首位元素 移除队列  删除这个元素
            Console.WriteLine("将首位元素 移除队列  删除这个元素");
            object dqu = q.Dequeue();
            Console.WriteLine(dqu);
            //循环输出队列里的全部元素:
            Console.WriteLine("循环输出队列里的全部元素");
            foreach (object obj2 in q)
            {
                Console.WriteLine(obj2);
            }

Hashtable类:
  在c#中,hashtable(哈希表)是system.collection命名空间提供的一个集合,可以将数组作为一组键(key)值(value)来存储,其中key通常可以用来快速查找,同时key是区别大小写,value用于存储对应的key的值。
   Hashtable中 key/value键值对均为object类型,所以hashtable可以支持任意类型的key/value键值对,但是key必须唯一的,可以向hashtable中自由添加和删除元素。
/*
             * 键值对 (key,value) 
             * key不能重复 value可以重复
             * 可以自动排序 
             */
            //声明一个hashtable
            Console.WriteLine("------------hashtable------------");
            Hashtable h = new Hashtable();
            //添加一对键值对
            h.Add("name","李XX");
            h.Add("age",12);
            h.Add("sex", "男");
            h.Add("address", "阳泉市");

            //根据 key 修改 
            h["name"] = "臭弟弟";  //键如果存在 正常修改
            h["job"] = "学生";     //键不存在,相当于添加一对 键值对

            //删除 根据key 直接删除一对 键值对
            h.Remove("sex");

            //hashtable里面存在了 返回true 如果不存在了 返回false
            Console.WriteLine("hashtable里面存在了 返回true 如果不存在了 返回false");
            Boolean b = h.Contains("age");
            Console.WriteLine(b);

            Boolean b1 = h.Contains("sex");
            Console.WriteLine(b1);
            Console.WriteLine();
            //查询 hashtable 里的的所有东西
            Console.WriteLine("查询 hashtable 里的的所有东西");
            foreach (DictionaryEntry dae in h)
            {
                object obj1 = dae.Key;
                object obj2 = dae.Value;
                Console.WriteLine("{0}----{1}",obj1,obj2);
            }
            Console.WriteLine();
            //遍历 所有的 键(kye)
            Console.WriteLine("遍历 所有的键(kye)");
            foreach (object ob in h.Keys) {
                Console.WriteLine(ob);
            }
            Console.WriteLine();
            //遍历所有的值(value)
            Console.WriteLine("遍历所有的值(value)");
            foreach (object ob1 in h.Values) {
                Console.WriteLine(ob1);
            }
  • Arraylist和Hashtable的比较:
    在这里插入图片描述

  • 泛型
    List类:
    与arraylist相比,使用list时添加的唯一语法是声明和实例化中的类型参数,虽热稍微增加了一些编码的复杂性,但好处是可以创建一个比arraylist更安全并且速度更快的列表,特别适用于列表项是值类型的情况。List类的这里的参数T就是指传入参数的类型,在创建集合对象时,就制定了元素的类型,所以在向集合添加元素时,如果类型不匹配就会出现语法错误。
    如果声明int类型了,在添加元素时,就只能添加指定类型的元素。

  • Dictionary<Tkey,TValue>
    在system.collections.generic中也有一个键值对的泛型集合dictionary<Tkey,Tvalues>称为字典。声明一个键为int型,值为object型的字典代码如下:
    Dictionary<int,object> dic =new dictionary<int,object>();

  • 对比泛型集合与普通集合
    在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值