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)表示操作需要的时间随集合中元素的增加而增加,且每个元素需要增加的时间呈对数曲线。

  • 相关阅读:
    CodeForces 659F Polycarp and Hay
    CodeForces 713C Sonya and Problem Wihtout a Legend
    CodeForces 712D Memory and Scores
    CodeForces 689E Mike and Geometry Problem
    CodeForces 675D Tree Construction
    CodeForces 671A Recycling Bottles
    CodeForces 667C Reberland Linguistics
    CodeForces 672D Robin Hood
    CodeForces 675E Trains and Statistic
    CodeForces 676D Theseus and labyrinth
  • 原文地址:https://www.cnblogs.com/dullfish/p/6109651.html
Copyright © 2011-2022 走看看