title: List<T> with fixed capacity item removal process time / C#
body: <p>I have the following question:</p>
  
  <pre><code>List&lt;int&gt; list = new List&lt;int&gt;(10);
  for (int i = 0; i &lt; 10; i++)
     list.Add(i);
  </code></pre>
  
  <p>Now list.Count and list.Capacity are 10. It's OK. But what will happen when I will try to remove first item?</p>
  
  <pre><code>list.RemoveAt(0);
  </code></pre>
  
  <p>Count is now 9 and Capacity still 10, but what happened inside list? List had to go through all the elements like:</p>
  
  <pre><code>list[0] = list[1];
  list[1] = list[2];
  // etc...
  list[9] = null;
  </code></pre>
  
  <p>?</p>
  
  <p>May be it could be better just to do by myself smthng like:</p>
  
  <pre><code>list[0] = list[list.Count - 1];
  </code></pre>
  
  <p>? But items order will be changed in this case.</p>
  
  <p>And how long will list.RemoveAt(0) take if I have a List with 10000000 elements with a preinitialized length? Will there be any difference if List will not have preinited length?</p>
  
  <p>UPD:</p>
  
  <p>Looked to the source (didn't know that they are in free access o.O ):</p>
  
  <pre><code>    // Removes the element at the given index. The size of the list is
      // decreased by one.
      //
      public void RemoveAt(int index) {
          if ((uint)index &gt;= (uint)_size) {
              ThrowHelper.ThrowArgumentOutOfRangeException();
          }
          _size--;
          if (index &lt; _size) {
              Array.Copy(_items, index + 1, _items, index, _size - index);
          }
          _items[_size] = default(T);
          _version++;
      }
  </code></pre>
  
  <p>So it really has Array.Copy inside. What a pity.
  Thanks to @TomTom.</p>