• C#中存储数据的集合:数组、集合、泛型、字典


    为什么把这4个东西放在一起来说,因为c#中的这4个对象都是用来存储数据的集合……。

    首先咱们把这4个对象都声明并实例化一下:

              //数组
    
            string[] m_Str = new string[5];
    
            //集合
    
            ArrayList m_AList = new ArrayList();
    
            //泛型集合
    
            List<int> m_List = new List<int>();
    
            //字典
    
            Dictionary<int, string> m_Dt = new Dictionary<int, string>();

    大家看看这4个对象放在一起从外观上有什么异同?

    我给大家提个醒,看看他们是不是都有NEW关键字,也就是说他们都需要实例化,在说明白点他们都是引用类型(不知道引用类型为何物的也不用特别纠结,以后会专门说说这个区别)。

    好了咱们继续看

    数组

    声明数组时[]里面有一个数字“5”,对了这就是区别,数组在声明的时候必须要指定长度。这是因为数组在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单。还有一点就是数组在声明定义的时候就指定了类型,我们定义的数组的类型是string的,而且因为数组是连续的,这就导致我们想在这个数组的第一个元素和第二个元素之间插队,插进一个成员是很不方便的。这就导致了我们需要一个数据集合,这个集合可以方便的让我们对该集合的成员进行add/delete/insert的操作.这就出现了集合(ArrayList)。

    //数组
    
     string[] m_Str = new string[5];
    
     m_Str[0] = "a";
     m_Str[1] = "a";
     m_Str[2] = "a";

    集合

    咱们看第2个对象集合(ArrayList),它在声明的时候既没有大小,也没有类型,这说明啥?说明他的大小是动态的你可以随意的add/delete/insert 如:

    //集合
    
    ArrayList m_AList = new ArrayList();
    
                m_AList.Add("a");
    
                m_AList.Add(10);
    
                m_AList.Add(true);
    
     
    
                m_AList.RemoveAt(0);
    
                m_AList.Insert(1, "aa");

    大家可能注意到集合ArrayList中Add的成员有字符串、数值、布尔值。这就说明了一个问题,集合中的每一个成员都是Object类型的,它把具体的成员装箱到object中在加入到自己。如果要是使用集合中的成员,因为成员是object类型的,所以也要拆箱到具体的类型中后再进行操作和使用。这样就会出现问题:1、消耗性能(频繁的拆箱和装箱)2、不安全,比如说上面的集合对象的第一个成员是字符型的,你取出来后和一个数值型的变量进行运算,就会报错……。那么接下来就又出现了一个对象——泛型集合(List<T>)对象。

    泛型

    泛型集合list<T>对象,大家可能一看见这个就蒙了,反正我一开始看见是蒙了,尖括号是啥,T是啥?别慌,其实不难,尖括号就是一种语法,至于T可以理解成占位符,它可以是string、int、bool……等。咱们看看代码的用法:

                  //泛型集合
    
                List<int> m_List = new List<int>();
    
                m_List.Add(10);
    
                m_List.Add(10);
    
                m_List.Add(10);
    
     
    
                m_List.RemoveAt(0);
    
                m_List.Insert(1,12);

    看起来好像和集合(ArrayList)的用法差不多,其实就是差不多了,哈哈。唯一的区别在于在声明泛型集合(List<T>)的时候需要制定里面成员的类型,上面的反省集合我们制定的类型是int的,这就是说你添加的成员必须也是int的,这会有啥好处?1.数据安全了,你添加string等非int类型的成员添加不进去(编译都过不去),这样数据就安全唯一了,2.节省的性能,不需要每一操作成员的时候都要拆箱和装箱了。

    泛型集合相比集合就相对完美了……

    泛型集合ListC#-注意事项

    1】 使用前必须实例化

    可以单纯实例化、也可以实例化时使用“集合初始化器”初始化。

    2】常用方法

    添加元素:Add()、Insert()

    删除元素:RemoveAt(索引)、Remove(对象)、Clear()

    3】常用属性

    获取元素个数:Count(对比数组 :Length

    4】集合遍历

    使用for循环、也可以使用foreach循环。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ListDemo
    {
    class Program
    {
    static void Main(string[] args)
    {
    //泛型集合的基本使用
    List<int> scoreList = new List<int>();
    scoreList.Add(98);
    scoreList.Add(28);
    scoreList.Add(38);
    scoreList.Add(78);
    scoreList.Add(88);
    //List<string> nameList = new List<string>();
    scoreList.Insert(2, 70);
    //获取元素总数
    Console.WriteLine("获取元素总数:"+scoreList.Count );
    Console.WriteLine("_________________");
    //Console.ReadLine();
    //遍历集合
    Console.WriteLine("遍历输出在第一种方法:");
    foreach (int score in scoreList)
    {
    Console.WriteLine(score);
    }
    Console.WriteLine("_________________");
    Console.WriteLine("遍历输出在第二种方法:");
    for (int i = 0; i < scoreList.Count; i++)
    {
    Console.WriteLine(scoreList[i]);
    }
    //删除一个元素
    Console.WriteLine("_________________");
    Console.WriteLine(" 删除一个元素");
    scoreList.Remove(70);
    scoreList.Remove(2);
    for (int i = 0; i < scoreList.Count; i++)
    {
    Console.WriteLine(scoreList[i]);
    }
    Console.WriteLine("_________________");
    Console.WriteLine("清除所有元素");
    scoreList.Clear();
    Console.WriteLine("获取元素总数:" + scoreList.Count);
    Console.ReadLine();
    }
    }
    }

    字典Dictionary

    最后咱们说说字典Dictionary<TKey, TValue>,大家一看又蒙了,别慌,想想刚才的泛型集合(List<T>)

    一样的,尖括号还是语法,你遵循就好了。而这一次的占位符不是T了,“因为第一个是索引,第二个是具体的值内容,”索引占位符变成额TKey, TValue。就这么简单呢。

    下面咱们看看语法:

                  //字典
    
                Dictionary<int, string> m_Dt = new Dictionary<int, string>();
    
                m_Dt.Add(0, "a");
    
                m_Dt.Add(1, "b");
    
                m_Dt.Add(0, "c");
    
     
    
                string str=m_Dt[0];

    看着用法还是比较简单的吧,拿m_Dt.Add(0, "a");这一句来说0是该字典的【索引】,【值】是字符串a。要根据字典的【索引】找到具体的【值】,语法就是m_Dt[0];这样就取到了字符串a.

    大家回忆一下:因为数组的使用不方便,所以有了集合(ArrayList)。因为集合(ArrayList)的不安全和消耗性能所以有了泛型集合(list<T>).这就是这3者的关系——弥补缺点。至于字典这个因为它也是储蓄一组数据的集合,同时用到了泛型的东西,所以放在一起来说了。

    好了这常见的4个储存一组数据的对象咱们就讲完了,下一章引用类型和值类型咱们见。

  • 相关阅读:
    Linux服务器centos7系统下搭建Jenkins
    在Linux下执行Jmeter脚本
    Jmeter进阶篇之监控服务器cpu,内存
    Jmeter进阶篇之保存测试结果
    Jmeter进阶篇之逻辑控制器
    Jmeter在非GUI(命令行)模式下生成测试报告
    电商平台满减活动需求分析
    如何在服务器上搭建svn
    电商平台抽奖活动需求分析
    28岁转行软件测试晚不晚
  • 原文地址:https://www.cnblogs.com/mhq-martin/p/8921470.html
Copyright © 2020-2023  润新知