zoukankan      html  css  js  c++  java
  • c# 集合

    集合适用于元素个数是动态的情况。

    当使用默认的构造函数创建一个空列表后(未指定容量),集合的容量为0;当往集合内添加元素,容量将变为4*2^n(n为0或正整数)。当指定集合的大小为size后,容量将变为size*2^n(n为0或正整数)。

    下面做了个小例子进行测试:

     Console.WriteLine("未指定大小的集合");
                List<int> li2 = new List<int>();//未指定大小的集合
                Printf(li2.Count, li2.Capacity);
    
                li2.Add(1);
                Printf(li2.Count, li2.Capacity);
    
                for (int i = 0; i < 4; i++)
                    li2.Add(i);
                Printf(li2.Count, li2.Capacity);
    
                for (int i = 0; i < 4; i++)
                    li2.Add(i);
                Printf(li2.Count, li2.Capacity);
    
                Console.ReadKey();

    结果:

    下面是指定大小的集合:

     const int Size = 10;
    
                List<int> li = new List<int>(Size); //指定大小的集合
    
                Printf(li.Count, li.Capacity);
    
                li.Add(1);
                li.Add(2);
                Printf(li.Count, li.Capacity);
    
                for (int i = 0; i < 10; i++)
                    li.Add(i);
                Printf(li.Count, li.Capacity);
    
                for (int i = 0; i < 10; i++)
                    li.Add(i);
                Printf(li.Count, li.Capacity);
    
                li.TrimExcess();//移除不需要的元素,只有当容量使用90%以上才执行
                Console.WriteLine("移除后:");
                Printf(li.Count, li.Capacity);
                Console.ReadKey();

    当集合的容量不足以存储添加的元素时,集合的容量就会自动的扩大,整个集合就要分配到一个新的内存块中,通过重新分配内存,创建一个新数组,并调用Array.Copy()方法将旧数组的元素复制到新的数组中去,这个过程会耗费开销。好的习惯是创建一个足够大的集合,这样就节省了重新分配内存的过程。

    集合类执行不同操作的性能:

    注:O(1)表示无论集合中有多少数据项,这个操作需要时间都不变。

         O(n)表示对于集合中的每个元素,需要增加的时间量是相同的。

         O(log n)表示操作需要的时间随集合中元素的增加而增加,且每个元素需要增加的时间呈对数曲线。

  • 相关阅读:
    20100420 ~ 20100520 小结与本月计划
    打造第二代测试框架TestDriven 2.0(六)—— 最新测试思路分析
    C# 反射性能测试
    Java 反射与cglib.proxy与cglib.beanmap与直接赋值 性能对比
    Apache Mina 源码分析。
    msn in c#, 最新代码
    20100520 ~ 20100620 小结与本月计划
    messageflow 集成到信息系统 第一阶段 手稿
    flash > AMF > java 的对象映射关系
    我在想:也许.net的基因里面就输给了java
  • 原文地址:https://www.cnblogs.com/dullfish/p/6109651.html
Copyright © 2011-2022 走看看