zoukankan      html  css  js  c++  java
  • List、dictionary、hashtable、ArrayList集合

    集合的引用命名空间在 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,暂不做说明。

  • 相关阅读:
    五.jQuery源码解析之jQuery.extend(),jQuery.fn.extend()
    根据插件Swipe,结合jQuery封装成的新的jQuery插件
    四.jQuery源码解析之jQuery.fn.init()的参数解析
    三.jQuery源码解析之jQuery的框架图
    二.jQuery源码解析之构建jQuery之构建函数jQuery的7种用法
    一.jQuery源码解析之总体架构
    javascript如何判断手机端的浏览器是否支持触碰功能
    javascript如何判断是手机还是电脑访问本网页
    javascript精髓篇之原型链维护和继承.
    VS2012破解_序列号
  • 原文地址:https://www.cnblogs.com/hudean/p/11677212.html
Copyright © 2011-2022 走看看