使用集合组织相关数据

时间:2022-05-04
本文章向大家介绍使用集合组织相关数据,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一.集合概述

  特点:可动态扩容

  1.ArrayList(数组列表)

    类似于数组,可动态维护

    命名空间:System.Collections   

      此命名空间包含接口和类。这些接口和类定义各种对象的集合 

    1.ArrayList常用方法及属性

属性名称

说明

Count

获取ArrayList中实际包含的元素数

Capacity

获取ArrayList的容量

返回值类型

方法名称

说明

int

Add(Object value)

将对象添加到ArrayList的结尾处

void

RemoveAt(int index)

移除ArrayList指定索引处的元素

void

Remove(Object value)

从ArrayList中移除特定的对象

void

Clear()

从ArrayList中移除所有元素

bool

Contains(Object value)

判断ArrayList中是否包含特定对象

void

Insert(int index,Object value)

添加元素到ArrayList中的指定下标

      示例代码:

            #region 01.集合使用
            ArrayList list = new ArrayList();
            //1.1  扔数据进去   逻辑思维
            list.Add("罗振宇===时间的朋友===跨年演讲");
           
            list.Add("前HP CEO 卡莉·菲奥莉娜 康柏");
            list.Add("隔壁老王");
            list.Insert(1,"我是老二吧!");
            Console.WriteLine("集合中元素总量"+list.Count);
            Console.WriteLine("集合中集合容量" + list.Capacity); //容量

            //1.2  遍历集合
            foreach (string item in list) //自动迭代  有一个迭代器
            {
                Console.WriteLine(item);
            }
            //1.3  删除数据
            //方式一:下标
           // list.RemoveAt(0);
            //方式二:根据内容删除
            list.Remove("罗振宇===时间的朋友===跨年演讲");
            Console.WriteLine("==========删除后===============");
            foreach (string item in list) //自动迭代  有一个迭代器
            {
                Console.WriteLine(item);
            }
            //判定某个元素 是否在集合中
            bool flag=list.Contains("李小龙");
            if (flag)
            {
                Console.WriteLine("Exists");
            }
            else
            {
                Console.WriteLine("Not Exists");
            }
            #endregion    

    2.通过集合初始化器(Collection Initializers)构造集合

      通过集合初始化器,无须在代码中指定多个对该类Add()方法的调用,编译器会添加这些调用,从而节省了很多的编码工作

      示例代码:

            #region 02。集合初始化器
            ArrayList list2 = new ArrayList()   //集合初始化
            {
                new SE(){Name="张靓颖",Age=20}, //对象初始化器
                new SE()
            };
            #endregion

  2.Hashtable(双列集合)

    通常称为:哈希表,它的每个值都是一个键/值对

    命名空间:System.Collections

    常用属性及方法:

属性名称

说明

Count

获取包含在Hashtable中键/值对的数目

Keys

获取包含在Hashtable中键的集合

Values

获取包含在Hashtable中值的集合

返回值类型

方法名称

说明

void

Add(Object key,Object value)

将代言指定键和值的元素添加到Hashtable中

void

Remove(Object key)

从Hastable中移除带有指定键的元素

void

Clear()

从Hastable中移除所有元素

    ★对HashTable遍历三种方案:

           ☆:第一种方式,遍历所有的keys,通过key的值获取value

           ☆:第二种方式:遍历所有的value集合

           ☆:第三种方式,同时遍历key和value

    示例代码:

         #region 01.双列集合HashTable(哈希表)
            Hashtable table = new Hashtable();  //table中的一个item=key+value
            table.Add("ICBC", "工商银行");
            table.Add("ABC", "农业银行");
            table.Add("CBC","中国建设银行");

            //根据key获取value
            Object bankName=table["ICBC"];
            Console.WriteLine(bankName);
            Console.WriteLine("===============================");
            //遍历的手段
            //foreach  for 因为HashTable 只有key没有索引,for 通过下标取值
            //Value   方式一:通过Key取出Value
            foreach (Object key in table.Keys)
            {
                Console.WriteLine(key);
                //索引器
                Console.WriteLine(table[key]);
            }
            //直接Value,如果我们能拿到所有值的集合  。
            foreach (Object value in table.Values)
            {
                Console.WriteLine(value);    
            }
            //key+value 迭代  ,一次拿到的是key+value的组合
            foreach (DictionaryEntry item in table)
            {
                //Console.WriteLine("");
                Console.WriteLine(item.Key);
                Console.WriteLine(item.Value);
            }
           #endregion        

  3.集合扩充原理:(Cpcity)

    初始状态,容量为0

    开始出现,容量为4

    每次超过当前容量,容量为(当前容量*2)

    扩容的触发时机是在调用Add()方法的时候

    简单示例代码:    

int[] nums = new int[0];
int num = (nums.Lentght==0)?4:(nums.Lenght*2);

二.泛型和泛型集合

  1.泛型

    引入概念:集合参数类型

    可以最大限度地重用代码,保护类型的安全及提高性能

    List<T>,Dictionary<K,V>

            #region 01.泛型集合先导课程
            PM pm = new PM();

            SE s1 = new SE();

            SE s2 = new SE();

            ArrayList list = new ArrayList();
            list.Add(pm);
            list.Add(s1);
            list.Add(s2);

            foreach (Object item in list)
            {

            }

            //PM pmResult=(PM)list[0];
            //SE seResult1 = (SE)list[1];
            //SE seResult2 = (SE)list[2]; 
            #endregion    

  2.泛型集合List<T>

    代替ArrayList

    命名空间:System.Collection.Generic

    语法:

    List<T> 对象名 = new List<T>();
    //“<T>”中T可以对集合中元素类型进行约束

    示例代码:

            #region 02.泛型集合
            //<真实类型> 限定 Add()入参的类型  
            List<SE> list = new List<SE>();
            SE se=new SE();
            se.Name = "比尔·盖茨";

            SE se2 = new SE();
            se2.Name = "李彦宏";
            list.Add(se);
            list.Add(se2);

            foreach (SE item in list)
            {
                Console.WriteLine(item.Name);
            }
            #endregion

  3.泛型集合Dictionary<K,T>

    代替Hashtable

    命名空间:System.Collection.Generic

    语法:

      Dictionary<K,V> 对象名 = new Dictionary<K,V>
      //“<K,V>”中K表示集合中Key的类型,V表示Value的类型

    废话不多说,上代码:

            #region 03.双列集合  Dictionay<K,V>
            Dictionary<string, string> dic = new Dictionary<string, string>();
            dic.Add("ICBC","中国工商银行");

            dic.Add("ABC", "中国农业银行");

            dic.Add("CBC", "中国建设银行");

            //找一下 EBank 有没有在集合中
            bool flag=dic.ContainsKey("EBank");
            if (flag)
            {
                Console.WriteLine("存在");
            }
            else
            {
                Console.WriteLine("不存在");
            }

            //双列集合遍历方案
            //方式一:
            foreach (string key in dic.Keys)
            {
                Console.WriteLine(key);
                Console.WriteLine(dic[key]);
            }
            //方式二;直接获取Value
            foreach (string value in dic.Values)
            {
                Console.WriteLine(value);
            }
            //方式三:key+value =======item
            foreach (KeyValuePair<string,string> item in dic)
            {
                Console.WriteLine(item.Key);
                Console.WriteLine(item.Value);
            }


            #endregion

         KeyValuePair<TKey,TValue>是一个泛型结构,定义可设置或检索的键/值对。这部分就不多做结束,大家可以通过MSDN了解

★注:泛型集合可以作为类的一个属性,使用泛型集合必须实例化~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~