Класс ArrayList. Пример необобщенной коллекции

Пространство имен System.Collections (необобщенные коллекции) содержит интерфейсы и классы, которые определяют различные коллекции объектов, такие как списки, очереди, двоичные массивы, хэш-таблицы и словари.

В классе ArrayList поддерживаются динамические массивы, расширяющиеся и сокращающиеся по мере необходимости, сравните их с массивами класса System.Array. Важно, что элементы коллекции могут быть разнородными (heterogeneous) объектами.

Когда это может быть полезным?

В языке C# стандартные массивы имеют фиксированную длину, которая не может изменяться во время выполнения программы. Это означает, что количество элементов в массиве нужно знать заранее.

Но иногда требуемая конкретная длина массива остается неизвестной до самого момента выполнения программы. Именно для таких ситуаций и предназначен класс ArrayList.

В классе ArrayList определяется массив переменной длины, который состоит из ссылок на объекты и может динамически увеличивать и уменьшать свой размер.

Массив типа ArrayList создается с первоначальным размером. Если этот размер превышается, то массив автоматически расширяется. А при удалении объектов из такого массива он автоматически сокращается.

Коллекции класса ArrayList широко применяются в практике программирования на C#. Многие способы применения коллекций класса ArrayList распространяются и на другие коллекции, в том числе и на обобщенные (аналогичный класс List<T>) . В классе ArrayList реализуются интерфейсы ICollection, IList, IEnumerable и ICloneable.

Рассмотрим пример:

using System;
using System.Collections;

namespace ConsoleApplication1
{
   class Program
   {   // делегат
       delegate void DPrint(ArrayList a);
  
       static void Main(string[] args)
       {
          ArrayList a = new ArrayList();

          // Лямбда-выражение (лямбда оператора)
          // print - экземпляр делегата
          DPrint print = (b) =>
          {
             foreach (object o in b)
                Console.WriteLine(o);
             Console.WriteLine("_____");
          };

          Console.WriteLine("элементов - " + a.Count);
          print(a);

          a.Add("Петр"); // добавить элемент
          a.Add("Сергей");
          a.Add("Яков");
          a.Add("Артур");
          a.Add("007");

          Console.WriteLine("элементов - " + a.Count);
          print(a);

          a.RemoveAt(1); // удалить 1-й
          Console.WriteLine("элементов - " + a.Count);
          print(a);

          a.Sort(); // сортировка
          print(a);

          int k = a.BinarySearch("Петр"); // Бинарный поиск
          Console.WriteLine("элемент - " + k.ToString());

          a.Reverse(); // наоборот
          print(a);

          k = a.BinarySearch("Петр"); // Бинарный поиск
          Console.WriteLine("элемент - " + k.ToString());

          Console.ReadKey(); 
      }
   }
}

Заметим, что для вывода элементов коллекции используется делегат, определяемый через лямбда-выражение, смотри также статью Делегаты и анонимные функции.

Результат:


Заметим, что если вы уберете двойные кавычки у объекта 007, то его тип станет числовым (Int32), значение будет равно 7, а в методе сортировки вы получите исключительную ситуацию: System.InvalidOperationException (сбой при сравнении двух элементов массива). При использовании обобщенных коллекций (класс List<T>), такие ситуации  не возникнут.


NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.


Помощь проекту:

Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
()
x