← Назад к вопросам

Приведи пример использования ArrayList

1.0 Junior🔥 132 комментариев
#Коллекции и структуры данных

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Пример использования ArrayList в C#

ArrayList — это коллекция из пространства имен System.Collections, которая представляет собой динамический массив объектов. В отличие от обычных массивов, ArrayList может автоматически изменять свой размер при добавлении или удалении элементов. Однако важно помнить, что ArrayList хранит элементы как объекты типа object, что приводит к необходимости приведения типов и может снижать производительность из-за упаковки (boxing) и распаковки (unboxing) типов значений. В современных версиях C# рекомендуется использовать обобщённые коллекции, такие как List<T>, но понимание ArrayList полезно для работы с устаревшим кодом.

Базовый пример использования ArrayList

Рассмотрим практический пример, где мы создадим ArrayList, добавим в него элементы различных типов, выполним основные операции и выведем результат.

using System;
using System.Collections;

class Program
{
    static void Main()
    {
        // Создание нового экземпляра ArrayList
        ArrayList myList = new ArrayList();

        // Добавление элементов различных типов
        myList.Add("Привет, мир!"); // строка
        myList.Add(42);             // целое число (происходит упаковка)
        myList.Add(3.14);           // число с плавающей точкой
        myList.Add(DateTime.Now);   // дата и время

        // Вывод количества элементов
        Console.WriteLine($"Количество элементов: {myList.Count}");
        Console.WriteLine($"Емкость внутреннего массива: {myList.Capacity}");

        // Итерация по элементам с использованием foreach
        Console.WriteLine("\nЭлементы коллекции:");
        foreach (var item in myList)
        {
            Console.WriteLine($"Тип: {item.GetType()}, Значение: {item}");
        }

        // Доступ к элементам по индексу (требуется приведение типа)
        string firstItem = (string)myList[0];
        int secondItem = (int)myList[1];
        Console.WriteLine($"\nПервый элемент: {firstItem}");
        Console.WriteLine($"Второй элемент: {secondItem}");

        // Вставка элемента по указанному индексу
        myList.Insert(1, "Вставленный элемент");
        Console.WriteLine("\nПосле вставки:");
        foreach (var item in myList)
        {
            Console.WriteLine(item);
        }

        // Удаление элемента по значению
        myList.Remove(42);
        Console.WriteLine("\nПосле удаления числа 42:");
        foreach (var item in myList)
        {
            Console.WriteLine(item);
        }

        // Проверка наличия элемента
        bool containsHello = myList.Contains("Привет, мир!");
        Console.WriteLine($"\nСодержит 'Привет, мир!': {containsHello}");

        // Сортировка элементов (требуется, чтобы элементы были сравнимыми)
        ArrayList sortableList = new ArrayList { 5, 1, 9, 3 };
        sortableList.Sort();
        Console.WriteLine("\nОтсортированный список чисел:");
        foreach (var item in sortableList)
        {
            Console.WriteLine(item);
        }

        // Очистка коллекции
        myList.Clear();
        Console.WriteLine($"\nПосле очистки количество элементов: {myList.Count}");
    }
}

Ключевые моменты использования ArrayList

  • Динамическое изменение размера: ArrayList автоматически увеличивает свою ёмкость при добавлении элементов сверх текущего лимита. Это избавляет от необходимости вручную управлять размером массива, но может приводить к накладным расходам на перераспределение памяти.
  • Гетерогенные коллекции: Поскольку ArrayList хранит элементы как object, в нём можно хранить объекты различных типов одновременно. Однако это усложняет код из-за необходимости проверки и приведения типов.
  • Упаковка и распаковка: При добавлении типов значений (например, int, double) происходит упаковка в объекты, а при извлечении — распаковка. Это может снижать производительность в высоконагруженных приложениях.
  • Отсутствие безопасности типов: Компилятор не может проверить типы элементов на этапе компиляции, что повышает риск ошибок времени выполнения. Например, попытка приведения элемента к несовместимому типу вызовет InvalidCastException.

Сравнение с List<T>

В современном C# предпочтительнее использовать обобщённую коллекцию List<T>, которая обеспечивает безопасность типов и исключает упаковку/распаковку для типов значений. Например, List<string> может хранить только строки, а List<int> — только целые числа. Вот краткое сравнение:

using System.Collections.Generic;

// Пример с List<T> для сравнения
List<string> stringList = new List<string>();
stringList.Add("Безопасность типов"); // Компилятор проверяет тип
string first = stringList[0]; // Приведение не требуется

Когда может потребоваться ArrayList

  • Работа с устаревшим кодом: Многие старые библиотеки и системы используют ArrayList, и для их поддержки может потребоваться знание этой коллекции.
  • Гибкость хранения объектов разных типов: В редких случаях, когда необходимо хранить разнородные данные без создания пользовательских классов, ArrayList может быть временным решением.
  • Образовательные цели: Для понимания эволюции коллекций в .NET и принципов работы динамических массивов.

Заключение

Хотя ArrayList является гибкой коллекцией, его использование в новых проектах не рекомендуется из-за проблем с производительностью и безопасностью типов. Вместо него следует применять List<T> или другие обобщённые коллекции из пространства имён System.Collections.Generic. Однако понимание ArrayList важно для поддержки legacy-кода и глубокого понимания архитектуры .NET. В приведённом примере показаны основные операции: добавление, вставка, удаление, сортировка и итерация, которые иллюстрируют принципы работы с динамическими массивами в C#.

Приведи пример использования ArrayList | PrepBro