Capacity of a List in C#

The Capacity property of a List<T> in C# represents the total number of elements the internal array can hold before needing to be resized. This is different from the Count property, which represents the actual number of elements currently stored in the list.

Understanding capacity is important for performance optimization, as the list automatically doubles its capacity when more space is needed, which involves allocating a new array and copying existing elements.

Syntax

Following is the syntax to get the capacity of a list −

int capacity = listName.Capacity;

You can also set the capacity explicitly −

listName.Capacity = newCapacity;

Count vs Capacity

Count vs Capacity Count Actual elements currently stored list.Count Capacity Total space available list.Capacity Capacity ? Count (always) Capacity doubles when more space is needed

Using Capacity Property

Example

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main(String[] args) {
      List<string> list1 = new List<string>();
      list1.Add("One");
      list1.Add("Two");
      list1.Add("Three");
      list1.Add("Four");
      list1.Add("Five");
      Console.WriteLine("Elements in List1...");
      foreach (string res in list1) {
         Console.WriteLine(res);
      }
      Console.WriteLine("Capacity of List1 = " + list1.Capacity);
      
      List<string> list2 = new List<string>();
      list2.Add("India");
      list2.Add("US");
      list2.Add("UK");
      list2.Add("Canada");
      list2.Add("Poland");
      list2.Add("Netherlands");
      Console.WriteLine("Elements in List2...");
      foreach (string res in list2) {
         Console.WriteLine(res);
      }
      Console.WriteLine("Capacity of List2 = " + list2.Capacity);
      Console.WriteLine("Is List2 equal to List1? = " + list2.Equals(list1));
   }
}

The output of the above code is −

Elements in List1...
One
Two
Three
Four
Five
Capacity of List1 = 8
Elements in List2...
India
US
UK
Canada
Poland
Netherlands
Capacity of List2 = 8
Is List2 equal to List1? = False

How Capacity Changes After Clear()

Example

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main(String[] args) {
      List<string> list = new List<string>();
      list.Add("One");
      list.Add("Two");
      list.Add("Three");
      list.Add("Four");
      list.Add("Five");
      Console.WriteLine("Elements in List...");
      foreach (string res in list) {
         Console.WriteLine(res);
      }
      Console.WriteLine("Count of elements in list = " + list.Count);
      Console.WriteLine("Capacity of List = " + list.Capacity);
      
      list.Clear();
      Console.WriteLine("Count of elements in list (after Clear) = " + list.Count);
      Console.WriteLine("Capacity of List (after Clear) = " + list.Capacity);
   }
}

The output of the above code is −

Elements in List...
One
Two
Three
Four
Five
Count of elements in list = 5
Capacity of List = 8
Count of elements in list (after Clear) = 0
Capacity of List (after Clear) = 8

Setting Capacity Explicitly

Example

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main(String[] args) {
      List<int> numbers = new List<int>();
      Console.WriteLine("Initial Capacity: " + numbers.Capacity);
      
      numbers.Capacity = 20;
      Console.WriteLine("After setting Capacity to 20: " + numbers.Capacity);
      
      for (int i = 1; i <= 5; i++) {
         numbers.Add(i);
      }
      Console.WriteLine("Count: " + numbers.Count + ", Capacity: " + numbers.Capacity);
      
      numbers.TrimExcess();
      Console.WriteLine("After TrimExcess - Count: " + numbers.Count + ", Capacity: " + numbers.Capacity);
   }
}

The output of the above code is −

Initial Capacity: 0
After setting Capacity to 20: 20
Count: 5, Capacity: 20
After TrimExcess - Count: 5, Capacity: 5

Key Points

Method/Property Description
list.Count Returns the actual number of elements in the list
list.Capacity Returns the total number of elements the internal array can hold
list.Clear() Removes all elements but keeps the same capacity
list.TrimExcess() Reduces capacity to match the current count

Conclusion

The Capacity property in C# Lists represents the internal array size and is always greater than or equal to Count. Understanding capacity helps optimize performance by pre-allocating space and avoiding frequent memory reallocations when adding many elements.

Updated on: 2026-03-17T07:04:36+05:30

380 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements