数组、集合、泛型集合的区别

首先咱们把这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.节省的性能,不需要每一操作成员的时候都要拆箱和装箱了。

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

泛型集合List(C#)-注意事项

【1】 使用前必须实例化

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

【2】常用方法

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

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

【3】常用属性

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

【4】集合遍历

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

数组与集合的区别:
一:数组声明了它容纳的
元素类型,而集合不声明。这是由于集合以object形式来存储它们的元素。
二:一个数组实例具有固定的
大小,不能伸缩。集合则可根据需要动态改变大小。
三:数组是一种可读/可写
数据结构没有办法创建一个只读数组。然而可以使用集合提供的ReadOnly方 只读方式来使用集合。该方法将返回一个集合的只读版本。
泛型与集合的区别
泛型听起来很高深的一个词,但实际上它的作用很简单,就是提高c#
程序的性能。
比如在
计算机中经常用到一些数据结构,如队列链表等,而其中的元素以前一般这么定义:object a=new object();
这样就带来一个严重的问题,用object来表示元素没有
逻辑问题,但每次拆箱、封箱就占用了大量的计算机资源,导致程序性能低下,而这部分内容恰恰一般都是程序的核心部分,如果使用object,那么程序的表现就比较糟糕。
而使用泛型则很好的解决这个问题,本质就是在编译
阶段就告诉编译器,数据结构中元素的种类,既然编译器知道了元素的种类,自然就避免了拆箱、封箱的操作,从而显著提高c#程序的性能。
比如List<string>就直接使用string
对象作为List的元素,而避免使用object对象带来的封箱、拆箱操作,从而提高程序性能。

发布了80 篇原创文章 · 获赞 1 · 访问量 3961

猜你喜欢

转载自blog.csdn.net/m18731455318/article/details/102796364