zoukankan      html  css  js  c++  java
  • C#数组,ArrayList,List区别

    共同点:都能存储一组对象

    数组:在内存中时连续存储的,所以索引很快,赋值与修改元素很快,事件复杂度为O(1),折半查找法查找元素效率高。

       增添删除元素的时候需要移动大量元素,因此提供了ArrayList对象

       string[] s = new string[3];

       s[0] = "a";    //赋值

       s[0] = "a1";    //修改

    ArrayList: 来自于命名空间System.Collections,他的大小时按照其中存储的数据来动态扩充与收缩的,所以我们在申明

         ArrayList对象的时候不需要指定长度

      ArrayList list = new ArrayList();

      list.Add("abc");  //新增数据

      list.Add("123");  

      list[2] = 345;       //修改数据

      list.RemoveAt(0);  //移除数据

      list.Insert(0,"hello C#");  //出入数据

      注:我们看实例,在list中不仅插入了字符串还有数字,这样在ArrayList中插入不同类型的数据是不允许的。因为这样

        ArrayList会把所有插入其中的数据都当作成object类型来处理。当我们使用ArrayList里的数据时会报类型不匹配错误。

        但即使插入数据时保证数据类型一致,在使用时也要将他转化为对应的原类型来处理,带来性能损耗,这就是拆装箱。

        装箱:就是把值类型的数据打包到引用类型的实例中。

        int i = 123;   object x = (object)i;    //把值类型123赋给object类型的对象x

        拆箱:从引用类型转变成值类型

        object x = 123;int i = (int)x;      //把引用类型123赋值给值类型的变量i

    泛型List:由于ArrayList存在拆装箱的性能损耗,后来就有了泛型的概念

        List<int> list = new List<int>();

        list.Add(123);     //添加数据

        list.Add[0] =345;     //修改数据

        list.RemoveAt(0);   //移除数据

      注:上例中,我们插入string字符"helo,C#",IDE就会报错,避免了拆装箱的性能问题了。

  • 相关阅读:
    SessionAttributes注解
    数据格式化
    数据类型转换器
    线程的常用方法总结
    线程生命周期
    分析配置DispatcherServlet类时load-on-startup标签作用
    springMVC的执行请求过程
    MyBatis之动态SQL
    MyBatis实现
    Spring框架中的JDK与CGLib动态代理
  • 原文地址:https://www.cnblogs.com/HansZimmer/p/9082568.html
Copyright © 2011-2022 走看看