По умолчанию коллекция типа ArrayList
не синхронизирована. Для получения синхронизированной оболочки, в которую заключается коллекция, вызывается метод Synchronized()
.
В классе ArrayList
имеется также приведенное ниже свойство Capacity
, помимо свойств, определенных в интерфейсах, которые в нем реализуются.
public virtual int Capacity { get; set; }
Свойство Capacity
позволяет получать и устанавливать емкость вызывающей коллекции типа ArrayList
. Емкость обозначает количество элементов, которые может содержать коллекция типа ArrayList
до ее вынужденного расширения. Как упоминалось выше, коллекция типа ArrayList
расширяется автоматически, и поэтому задавать ее емкость вручную необязательно. Но из соображений эффективности это иногда можно сделать, если количество элементов коллекции известно заранее. Благодаря этому исключаются издержки на выделение дополнительной памяти.
С другой стороны, если требуется сократить размер базового массива коллекции типа ArrayList
, то для этой цели достаточно установить меньшее значение свойства Capacity
. Но это значение не должно быть меньше значения свойства Count
. Напомним, что свойство Count
определено в интерфейсе ICollection
и содержит количество объектов, хранящихся в коллекции на данный момент. Всякая попытка установить значение свойства Capacity
меньше значения свойства Count
приводит к генерированию исключения ArgumentOutOfRangeException
. Поэтому для получения такого количества элементов коллекции типа ArrayList
, которое содержится в ней на данный момент, следует установить значение свойства Capacity
равным значению свойства Count
. Для этой цели можно также вызвать метод TrimToSize()
.
В приведенном ниже примере программы демонстрируется применение класса ArrayList
. В ней сначала создается коллекция типа ArrayList
, а затем в эту коллекцию вводятся символы, после чего содержимое коллекции отображается. Некоторые элементы затем удаляются из коллекции, и ее содержимое отображается вновь. После этого в коллекцию вводятся дополнительные элементы, что вынуждает увеличить ее емкость. И наконец, содержимое элементов коллекции изменяется.
// Продемонстрировать применение класса ArrayList.
using System;
using System.Collections;
class ArrayListDemo {
static void Main() {
// Создать коллекцию в виде динамического массива.
ArrayList al = new ArrayList();
Console.WriteLine("Исходное количество элементов: " + al.Count);
Console.WriteLine();
Console.WriteLine("Добавить 6 элементов");
// Добавить элементы в динамический массив.
al.Add('С');
al.Add('А');
al.Add('E');
al.Add('В');
al.Add('D');
al.Add('F') ;
Console.WriteLine("Количество элементов: " + al.Count);
// Отобразить содержимое динамического массива,
// используя индексирование массива.
Console.Write("Текущее содержимое: ");
for(int i=0; i < al.Count; i++)
Console.Write (al[i] + " ");
Console.WriteLine("\n");
Console.WriteLine("Удалить 2 элемента");
// Удалить элементы из динамического массива,
al.Remove('F');
al.Remove('A');
Console.WriteLine("Количество элементов: " + al.Count);
// Отобразить содержимое динамического массива, используя цикл foreach.
Console.Write("Содержимое: ");
foreach(char c in al)
Console.Write(c + " ");
Console.WriteLine("\n");
Console.WriteLine("Добавить еще 20 элементов");
// Добавить количество элементов, достаточное для
// принудительного расширения массива,
for (int i=0; i < 20; i++)
al.Add((char)('a' + i));
Console.WriteLine("Текущая емкость: " + al.Capacity);
Console.WriteLine("Количество элементов после добавления 20 новых: " + al.Count);
Console.Write("Содержимое: ");
foreach(char c in al)
Console.Write(c + " ");
Console.WriteLine("\n");
// Изменить содержимое динамического массива,
// используя индексирование массива.
Console.WriteLine("Изменить три первых элемента");
Читать дальше