ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

List、dictionary、hashtable、ArrayList集合

2019-10-15 13:53:50  阅读:228  来源: 互联网

标签:ArrayList List 泛型 studentList hashtable 集合 new


集合的引用命名空间在 system.Collections下

1、为什么引入集合

因为数组长度是固定的,为了建立一个动态的"数组",所以引入了集合。

2、为什么引入ArrayList 非泛型集合?

ArrayList可以填补数组的不足,进行元素的动态维护。数组的长度是固定的,而ArrayList的容量可以根据需要自动扩充,它的索引会根据程序的扩展而重新分配和调整。

ArrayList的缺点:ArrayList是非泛型集合,添加和读取数据有装箱拆箱,所以会有性能损失。

//创建
            ArrayList studentList = new ArrayList();
            //添加
            studentList.Add(new Student { StudentNo = "01", RealName = "学生01" });
            studentList.Add(new Student { StudentNo = "02", RealName = "学生02" });
            studentList.Add(new Student { StudentNo = "03", RealName = "学生03" });
            //读取
            Student target = (Student)studentList[0];
            //删除 根可根据索引删除指定元素。由于添加和删除会导致ArrayList索引自动分配和调整,删除一个元素后(如果不是最后一个元素),其他元素的索引可能会受影响。
            studentList.RemoveAt(0);
            studentList.RemoveAt(1);
            //studentList.RemoveAt(2);//取消注释会导致程序报错,因为删除两个元素后,列表只有一个元素,最大的索引为0。
            //清空
            studentList.Clear();

3.为什么引入HashTable(哈希表、散列表) 非泛型集合?

  对于ArrayList集合我们通常会使用索引访问操作元素,但是这样的话就存在一个问题,使用这种方式必须知道要操作的索引是多少。Hashtable可以针对这种情况解决问题,它为每个元素都取了一个有意义并且唯一的关键字,然后通过关键字来访问元素。Hashtable的数据是通过(key)键和值(value)来组织的,所以也叫"字典"。

  //创建
            Hashtable hashtable = new Hashtable();
            //添加
            hashtable.Add("key1", "value1");
            hashtable.Add("key2", "value2");
            //读取
            string val1 = (string)hashtable["key1"];
            object val3 = hashtable["key3"];//null
            //删除
            hashtable.Remove("key1");
            //清空
            hashtable.Clear();   

HashTable说明:

  Hashtable元素时只能使用通过key来取值,键和值均是object类型,键不可重复。读取一个不存在的key,得到的value为null。

  Hashtable是非泛型集合,添加和读取数据有装箱拆箱,所以会有性能损失。

4.为什么引入泛型集合?

  非泛型集合对元素的数据类型没有约束性,在添加时数据类型都会被转为Object类型(装箱拆箱导致性能损失),读取的时候也不知道对象的具体的类型,所以在元素数据类型转换的时候就存在了不确定性(类型不安全)。

  而泛型集合限定了集合中的数据类型(类型安全),没有装箱拆箱(没有性能损失)。

5.为什么引入List<T>泛型集合?

  List<T>泛型集合是ArrayList非泛型集合的升级版,是类型安全的,没有装箱和拆箱的性能损耗。

//创建
            List<Student> list = new List<Student>();
            //添加
            list.Add(new Student { RealName = "学生001" });
            //读取
            Student student = list[0];
            //删除
            list.RemoveAt(0);
            //清空
            list.Clear();

6.为什么引入Dictionary<K,V>?

  Dictionary<K,V>泛型集合是HashTable非泛型集合的升级版,是类型安全的,没有装箱和拆箱的性能损耗。

 //创建
            Dictionary<string, string> dict = new Dictionary<string, string>();
            //添加
            dict.Add("key1", "value1");
            //读取
            string value = dict["key1"];
            //删除
            dict.Remove("key1");
            //清空
            dict.Clear();

总结

  为了建立一个动态的"数组",引入了非泛型ArrayList。

  为了建立一个"字典",引入了非泛型HashTable。

  为了建立一个动态的类型安全的"数组",引入了泛型List<T>。

  为了建立一个类型安全的"字典",引入了泛型Dictionary<object,object>。

  为了排序,引入了SortedList SortedDictionary,暂不做说明。

 

标签:ArrayList,List,泛型,studentList,hashtable,集合,new
来源: https://www.cnblogs.com/hudean/p/11677212.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有