C#--Arraylist,list泛型集合,哈希表,字典

区别和联系

先用两张图帮助大家理解一下他们四者的区别和联系

小杨老师画的图

Arraylist和List泛型集合

从上图可以看出,一个数组只能存储一种类型的数据,而且数据的个数是确定的,在程序设计当中往往不能满足我们的要求,这时候就需用到集合了。arraylist是非泛型集合,它的数据类型为object,可以存储任意类型的数据,同时它是可变长的,使用时需要引入命名空间using System.Collections,这就克服了数组的一些缺点。

当然,我们要是只需要存储一种数据类型,同时不限数据存储的个数,用list<T>泛型集合就可以了,T代表要存储的数据类型,不论用哪种集合,都需要先进行实例化,下面分别举例介绍:

List<string> ListString=new List<string>();   存储string字符串类型的

List<int> ListInt=new List<int>();                    存储int整型的

如果用到多种数据类型的话,就是用arraylist泛型集合:

 ArrayList arraylist = new ArrayList();

arraylist方法详见:

https://blog.csdn.net/wtt15100/article/details/104460377

List集合:

            //随机的往这个list集合中添加10个数据,数据不能重复,求和,求最大值,求最小值,求平均值
            List<int> listint = new List<int>();        //创建一个list集合
            Random r = new Random();
            int num;
            while (listint.Count!=10)
            {
                num = r.Next(1, 100);               //产生随机数
                if (!listint.Contains(num))         //如果list当中不包含这个数
                {
                    listint.Add(num);               //添加到list当中
                }
            }
            Console.WriteLine("总和为:{0}",listint.Sum());
            Console.WriteLine("最大值为:{0}",listint.Max());
            Console.WriteLine("最小值为{0}",listint.Min());
            Console.WriteLine("平均值为{0}",listint.Average());
            Console.ReadKey();

Hashtable哈希表和Dictionary字典

Hashtable和字典都是以键值对的形式存储,根据键名找到对应的值,键名不可以重复,使用的时候引入命名空间using System.Collections。Dictionary字典也是以键值对的形式存在,与哈希表不同的是,哈希表存储的数据类型没有限制,需要引入命名空间,字典指定两种存储的类型,不需要引入命名空间。

给大家举个例子,不知道大家没有没有用过英汉词典,英汉词典中一个英文单词后面对应着它的汉语意思,有的时候这个单词的意思可能不止有一个。比如现在我要查patient这个单词,字典那么厚,一页页的翻肯定是不可能的,这时候我们只需要在目录中找到P,在P下面对应找到patient(键)这个单词就可以了,翻到那一页后发现有两个意思(两个值),一个做形容词是有耐心的,一个做名词是病人,患者的意思。

在这里,哈希表就像一个词典一样,里面以键值对的形式进行存值,patient叫做键,查出来的中文意思叫做Value值,像英汉词典一样,尽管value值(汉语意思)不止一个,但是key键(英文单词)是唯一的,不可以重复的。

哈希表:

            Hashtable ht = new Hashtable();         //实例化一个哈希表
            ht.Add("你好", "Hello");                //向哈希表中添加一个键值
            //遍历哈希表用foreach
            foreach (var key in ht.Keys)
            {
                Console.WriteLine("key:{0}",key);
                Console.WriteLine("value:{0}",ht[key]);
            }

字典:

            Dictionary<string, string> dic = new Dictionary<string, string>();
            dic.Add("张三", "李三");
            dic.Add("张四", "李四");

            Dictionary<string, int> dict = new Dictionary<string, int>();
            dict.Add("你好", 1);

注意

ararylist因为它存储的是object类型的数据,所以在赋值时需要将数据类型转换为object类型,也叫装箱操作,同时从arraylist当中取值时,要将object类型转换为其本身的数据类型,就是拆箱操作。但是在list<T>泛型集合中实例化时就规定了只能存储一种数据类型,所以不需要进行数据类型之间的转换,它的效率和性能都高于arraylist集合。哈希表和字典也是一样的,哈希表存储的类型是object,存值和取值时也会发生装箱和拆箱操作,所以,字典的效率和性能高于哈希表。

什么叫做装箱和拆箱,点一点下面就知道到啦~~~~

https://blog.csdn.net/wtt15100/article/details/104466564

 

发布了71 篇原创文章 · 获赞 21 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/wtt15100/article/details/104460032
今日推荐