Перейти к содержимому

Для чего используется класс arraylist c

  • автор:

Для чего используется класс arraylist c

Итак, класс ArrayList представляет коллекцию объектов. И если надо сохранить вместе разнотипные объекты — строки, числа и т.д., то данный класс как раз для этого подходит.

Основные методы класса:

  • int Add(object value) : добавляет в список объект value
  • void AddRange(ICollection col) : добавляет в список объекты коллекции col, которая представляет интерфейс ICollection — интерфейс, реализуемый коллекциями.
  • void Clear() : удаляет из списка все элементы
  • bool Contains(object value) : проверяет, содержится ли в списке объект value. Если содержится, возвращает true, иначе возвращает false
  • void CopyTo(Array array) : копирует текущий список в массив array.
  • ArrayList GetRange(int index, int count) : возвращает новый список ArrayList, который содержит count элементов текущего списка, начиная с индекса index
  • int IndexOf(object value) : возвращает индекс элемента value
  • void Insert(int index, object value) : вставляет в список по индексу index объект value
  • void InsertRange(int index, ICollection col) : вставляет в список начиная с индекса index коллекцию ICollection
  • int LastIndexOf(object value) : возвращает индекс последнего вхождения в списке объекта value
  • void Remove(object value) : удаляет из списка объект value
  • void RemoveAt(int index) : удаляет из списка элемент по индексу index
  • void RemoveRange(int index, int count) : удаляет из списка count элементов, начиная с индекса index
  • void Reverse() : переворачивает список
  • void SetRange(int index, ICollection col) : копирует в список элементы коллекции col, начиная с индекса index
  • void Sort() : сортирует коллекцию

Кроме того, с помощью свойства Count можно получить количество элементов в списке.

Посмотрим применение класса на примере.

using System; using System.Collections; namespace Collections < class Program < static void Main(string[] args) < ArrayList list = new ArrayList(); list.Add(2.3); // заносим в список объект типа double list.Add(55); // заносим в список объект типа int list.AddRange(new string[] < "Hello", "world" >); // заносим в список строковый массив // перебор значений foreach (object o in list) < Console.WriteLine(o); >// удаляем первый элемент list.RemoveAt(0); // переворачиваем список list.Reverse(); // получение элемента по индексу Console.WriteLine(list[0]); // перебор значений for (int i = 0; i < list.Count; i++) < Console.WriteLine(list[i]); >Console.ReadLine(); > > >

Во-первых, так как класс ArrayList находится в пространстве имен System.Collections, то подключаем его ( using System.Collections; ).

Вначале создаем объект коллекции через конструктор как объект любого другого класса: ArrayList list = new ArrayList(); . При необходимости мы могли бы так же, как и с массивами, выполнить начальную инициализацию коллекции, например, ArrayList list = new ArrayList();

Далее последовательно добавляем разные значения. Данный класс коллекции, как и большинство других коллекций, имеет два способа добавления: одиночного объекта через метод Add и набора объектов, например, массива или другой коллекции через метод AddRange

Через цикл foreach мы можем пройтись по всем объектам списка. И поскольку данная коллекция хранит разнородные объекты, а не только числа или строки, то в качестве типа перебираемых объектов выбран тип object: foreach (object o in list)

Многие коллекции, в том числе и ArrayList, реализуют удаление с помощью методов Remove/RemoveAt. В данном случае мы удаляем первый элемент, передавая в метод RemoveAt индекс удаляемого элемента.

В завершении мы опять же выводим элементы коллекции на экран только уже через цикл for. В данном случае с перебором коллекций дело обстоит также, как и с массивами. А число элементов коллекции мы можем получить через свойство Count

С помощью индексатора мы можем получить по индексу элемент коллекции так же, как и в массивах: object firstObj = list[0];

Класс ArrayList

В классе ArrayList поддерживаются динамические массивы, расширяющиеся и сокращающиеся по мере необходимости. В языке C# стандартные массивы имеют фиксированную длину, которая не может изменяться во время выполнения программы. Это означает, что количество элементов в массиве нужно знать заранее. Но иногда требуемая конкретная длина массива остается неизвестной до самого момента выполнения программы. Именно для таких ситуаций и предназначен класс ArrayList. В классе ArrayList определяется массив переменной длины, который состоит из ссылок на объекты и может динамически увеличивать и уменьшать свой размер.

Массив типа ArrayList создается с первоначальным размером. Если этот размер превышается, то массив автоматически расширяется. А при удалении объектов из такого массива он автоматически сокращается. Коллекции класса ArrayList широко применяются в практике программирования на C#. Многие способы применения коллекций класса ArrayList распространяются и на другие коллекции, в том числе и на обобщенные. В классе ArrayList реализуются интерфейсы ICollection, IList, IEnumerable и ICloneable. Ниже приведены конструкторы класса ArrayList:

public ArrayList() public ArrayList(ICollection с) public ArrayList(int capacity)

Первый конструктор создает пустую коллекцию класса ArrayList с нулевой первоначальной емкостью. Второй конструктор создает коллекцию типа ArrayList с количеством инициализируемых элементов, которое определяется параметром c и равно первоначальной емкости массива. Третий конструктор создает коллекцию, имеющую указанную первоначальную емкость, определяемую параметром capacity. В данном случае емкость обозначает размер базового массива, используемого для хранения элементов коллекции. Емкость коллекции типа ArrayList может увеличиваться автоматически по мере добавления в нее элементов.

В классе ArrayList определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Коллекцию класса ArrayList можно отсортировать, вызвав метод Sort(). В этом случае поиск в отсортированной коллекции с помощью метода BinarySearch() становится еще более эффективным. Содержимое коллекции типа ArrayList можно также обратить, вызвав метод Reverse(). Некоторые из наиболее часто используемых методов класса ArrayList перечислены ниже:

AddRange()

Добавляет элементы из коллекции в конец вызывающей коллекции типа ArrayList

BinarySearch()

Выполняет поиск в вызывающей коллекции значения. Возвращает индекс найденного элемента. Если искомое значение не найдено, возвращает отрицательное значение. Вызывающий список должен быть отсортирован

СоруТо()

Копирует содержимое вызывающей коллекции в массив, который должен быть одномерным и совместимым по типу с элементами коллекции

FixedSize()

Заключает коллекцию в оболочку типа ArrayList с фиксированным размером и возвращает результат. Возвращает часть вызывающей коллекции типа ArrayList. Часть возвращаемой коллекции начинается с элемента, указываемого по индексу, и включает количество элементов, определяемое параметром count. Возвращаемый объект ссылается на те же элементы, что и вызывающий объект.

IndexOf()

Возвращает индекс первого вхождения объекта в вызывающей коллекции. Если искомый объект не обнаружен, возвращает значение -1

InsertRange()

Вставляет элементы коллекции в вызывающую коллекцию, начиная с элемента, указываемого по индексу

Readonly()

Заключает коллекцию в оболочку типа ArrayList, доступную только для чтения, и возвращает результат

RemoveRange()

Удаляет часть вызывающей коллекции, начиная с элемента, указываемого по индексу index, и включая количество элементов, определяемое параметром count

Sort()

Сортирует вызывающую коллекцию по нарастающей

В классе ArrayList поддерживается также ряд методов, оперирующих элементами коллекции в заданных пределах. Так, в одну коллекцию типа ArrayList можно вставить другую коллекцию, вызвав метод InsertRange(). Для удаления из коллекции элементов в заданных пределах достаточно вызвать метод RemoveRange(). А для перезаписи элементов коллекции типа ArrayList в заданных пределах элементами из другой коллекции служит метод SetRange(). И наконец, элементы коллекции можно сортировать или искать в заданных пределах, а не во всей коллекции.

По умолчанию коллекция типа ArrayList не синхронизирована. Для получения синхронизированной оболочки, в которую заключается коллекция, вызывается метод Synchronized().

В классе ArrayList имеется также приведенное ниже свойство Capacity, помимо свойств, определенных в интерфейсах, которые в нем реализуются:

public virtual int Capacity

Свойство Capacity позволяет получать и устанавливать емкость вызывающей коллекции типа ArrayList. Емкость обозначает количество элементов, которые может содержать коллекция типа ArrayList до ее вынужденного расширения. Как упоминалось выше, коллекция типа ArrayList расширяется автоматически, и поэтому задавать ее емкость вручную необязательно. Но из соображений эффективности это иногда можно сделать, если количество элементов коллекции известно заранее. Благодаря этому исключаются издержки на выделение дополнительной памяти.

С другой стороны, если требуется сократить размер базового массива коллекции типа ArrayList, то для этой цели достаточно установить меньшее значение свойства Capacity. Но это значение не должно быть меньше значения свойства Count. Напомним, что свойство Count определено в интерфейсе ICollection и содержит количество объектов, хранящихся в коллекции на данный момент. Всякая попытка установить значение свойства Capacity меньше значения свойства Count приводит к генерированию исключения ArgumentOutOfRangeException. Поэтому для получения такого количества элементов коллекции типа ArrayList, которое содержится в ней на данный момент, следует установить значение свойства Capacity равным значению свойства Count. Для этой цели можно также вызвать метод TrimToSize().

Давайте рассмотрим пример использования некоторых методов класса ArrayList:

using System; using System.Collections; namespace ConsoleApplication1 < class MyCollection < public static ArrayList NewCollection(int i) < Random ran = new Random(); ArrayList arr = new ArrayList(); for (int j = 0; j < i; j++) arr.Add(ran.Next(1, 50)); return arr; >public static void RemoveElementMyCollection(int i, int j, ref ArrayList arr) < arr.RemoveRange(i, j); >public static void AddElementInMyCollection(int i, ref ArrayList arr) < Random ran = new Random(); for (int j = 0; j < i; j++) arr.Add(ran.Next(1, 50)); >public static void WriteMyCollection(ArrayList arr) < foreach (int a in arr) Console.Write("\t", a); Console.WriteLine("\n"); > > class Program < static void Main() < // Создадим новую коллекцию чисел длиной 8 ArrayList Coll = MyCollection.NewCollection(8); Console.WriteLine("Исходная коллекция чисел: "); MyCollection.WriteMyCollection(Coll); // Удалим пару элементов MyCollection.RemoveElementMyCollection(5, 2, ref Coll); Console.WriteLine("Коллекция после удаления предпоследних двух элементов: "); MyCollection.WriteMyCollection(Coll); // Добавим еще несколько элементов MyCollection.AddElementInMyCollection(10, ref Coll); Console.WriteLine("Добавили 10 элементов: "); MyCollection.WriteMyCollection(Coll); // Отсортируем теперь коллекцию Coll.Sort(); Console.WriteLine("Отсортированная коллекция: "); MyCollection.WriteMyCollection(Coll); Console.ReadLine(); >> >

Array List Класс

Пространство имен: System.Collections Сборки: mscorlib.dll, System.Collections.NonGeneric.dll Сборка: System.Runtime.dll Сборка: System.Collections.NonGeneric.dll Сборка: System.Runtime.Extensions.dll Сборка: mscorlib.dll Сборка: netstandard.dll

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Реализует интерфейс IList с помощью массива с динамическим изменением размера по требованию.

public ref class ArrayList : System::Collections::IList
public ref class ArrayList : ICloneable, System::Collections::IList
public class ArrayList : System.Collections.IList
public class ArrayList : ICloneable, System.Collections.IList
[System.Serializable] public class ArrayList : ICloneable, System.Collections.IList
[System.Serializable] [System.Runtime.InteropServices.ComVisible(true)] public class ArrayList : ICloneable, System.Collections.IList
type ArrayList = class interface IEnumerable interface IList interface ICollection
type ArrayList = class interface ICollection interface IEnumerable interface IList interface ICloneable
type ArrayList = class interface IEnumerable interface IList interface ICollection interface ICloneable
[] type ArrayList = class interface IList interface ICollection interface IEnumerable interface ICloneable
[] [] type ArrayList = class interface IList interface ICollection interface IEnumerable interface ICloneable
[] [] type ArrayList = class interface IList interface ICloneable interface ICollection interface IEnumerable
Public Class ArrayList Implements IList
Public Class ArrayList Implements ICloneable, IList

Наследование
Производный
Реализации

Примеры

В следующем примере показано, как создать и инициализировать ArrayList и отобразить его значения.

using namespace System; using namespace System::Collections; void PrintValues( IEnumerable^ myList ); int main() < // Creates and initializes a new ArrayList. ArrayList^ myAL = gcnew ArrayList; myAL->Add( "Hello" ); myAL->Add( "World" ); myAL->Add( "!" ); // Displays the properties and values of the ArrayList. Console::WriteLine( "myAL" ); Console::WriteLine( " Count: ", myAL->Count ); Console::WriteLine( " Capacity: ", myAL->Capacity ); Console::Write( " Values:" ); PrintValues( myAL ); > void PrintValues( IEnumerable^ myList ) < IEnumerator^ myEnum = myList->GetEnumerator(); while ( myEnum->MoveNext() ) < Object^ obj = safe_cast(myEnum->Current); Console::Write( " ", obj ); > Console::WriteLine(); > /* This code produces output similar to the following: myAL Count: 3 Capacity: 4 Values: Hello World ! */ 
using System; using System.Collections; public class SamplesArrayList < public static void Main() < // Creates and initializes a new ArrayList. ArrayList myAL = new ArrayList(); myAL.Add("Hello"); myAL.Add("World"); myAL.Add("!"); // Displays the properties and values of the ArrayList. Console.WriteLine( "myAL" ); Console.WriteLine( " Count: ", myAL.Count ); Console.WriteLine( " Capacity: ", myAL.Capacity ); Console.Write( " Values:" ); PrintValues( myAL ); > public static void PrintValues( IEnumerable myList ) < foreach ( Object obj in myList ) Console.Write( " ", obj ); Console.WriteLine(); > > /* This code produces output similar to the following: myAL Count: 3 Capacity: 4 Values: Hello World ! */ 
Imports System.Collections Public Class SamplesArrayList Public Shared Sub Main() ' Creates and initializes a new ArrayList. Dim myAL As New ArrayList() myAL.Add("Hello") myAL.Add("World") myAL.Add("!") ' Displays the properties and values of the ArrayList. Console.WriteLine("myAL") Console.WriteLine(" Count: ", myAL.Count) Console.WriteLine(" Capacity: ", myAL.Capacity) Console.Write(" Values:") PrintValues(myAL) End Sub Public Shared Sub PrintValues(myList As IEnumerable) Dim obj As [Object] For Each obj In myList Console.Write(" ", obj) Next obj Console.WriteLine() End Sub End Class ' This code produces output similar to the following: ' ' myAL ' Count: 3 ' Capacity: 4 ' Values: Hello World ! 

Комментарии

Мы не рекомендуем использовать класс для новой разработки ArrayList . Вместо этого рекомендуется использовать универсальный List класс . Класс ArrayList предназначен для хранения разнородных коллекций объектов. Однако он не всегда обеспечивает лучшую производительность. Вместо этого мы рекомендуем следующее:

  • Для разнородной коллекции объектов используйте List тип (в C#) или List(Of Object) (в Visual Basic).
  • Для однородной коллекции объектов используйте List класс .
    Сведения об относительной производительности этих классов см. в List разделе Рекомендации по производительности в справочном разделе. Общие сведения об использовании универсальных коллекций вместо неуниверсийных типов коллекций см. в статье Неуниверсические коллекции на сайте GitHub.

Сортировка ArrayList не гарантируется. Необходимо отсортировать ArrayList , вызвав его Sort метод перед выполнением операций (например BinarySearch, ), для которых требуется ArrayList отсортировать . Чтобы сохранить коллекцию, которая автоматически отсортирована по мере добавления новых элементов, можно использовать SortedSet класс .

Емкость ArrayList — это количество элементов, которые могут содержаться в объекте ArrayList . При добавлении элементов в ArrayListемкость автоматически увеличивается по мере необходимости путем перераспределения. Емкость можно уменьшить путем вызова TrimToSize или явного Capacity задания свойства.

Только платформа .NET Framework. Для очень больших ArrayList объектов можно увеличить максимальную емкость до 2 миллиардов элементов в 64-разрядной системе, задав enabled атрибуту элемента конфигурации значение true в среде среды выполнения.

Доступ к элементам в этой коллекции можно получить с помощью целочисленного индекса. Индексы в этой коллекции отсчитываются от нуля.

Коллекция ArrayList принимает в null качестве допустимого значения. Он также позволяет дублировать элементы.

Использование многомерных массивов в качестве элементов в ArrayList коллекции не поддерживается.

Конструкторы

Инициализирует новый экземпляр класса ArrayList, который является пустым и имеет начальную емкость по умолчанию.

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

Инициализирует новый пустой экземпляр класса ArrayList с указанной начальной емкостью.

Свойства

Возвращает или задает число элементов, которое может содержать список ArrayList.

Получает число элементов, фактически содержащихся в списке ArrayList.

Получает значение, указывающее, имеет ли список ArrayList фиксированный размер.

Получает значение, указывающее, является ли объект ArrayList доступным только для чтения.

Возвращает значение, показывающее, является ли доступ к коллекции ArrayList синхронизированным (потокобезопасным).

Возвращает или задает элемент по указанному индексу.

Получает объект, с помощью которого можно синхронизировать доступ к коллекции ArrayList.

Методы

Создает оболочку класса ArrayList для указанного интерфейса IList.

Добавляет объект в конец коллекции ArrayList.

Добавляет элементы интерфейса ICollection в конец списка ArrayList.

Выполняет поиск элемента в диапазоне элементов отсортированного списка ArrayList, используя указанную функцию сравнения, и возвращает индекс элемента, отсчитываемый от нуля.

Выполняет поиск элемента по всему отсортированному списку ArrayList, используя компаратор по умолчанию, и возвращает индекс элемента, отсчитываемый от нуля.

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

Удаляет из коллекции ArrayList все элементы.

Создает неполную копию ArrayList.

Определяет, входит ли элемент в коллекцию ArrayList.

Копирует весь список ArrayList в совместимый одномерный массив Array, начиная с начального элемента целевого массива.

Копирует целый массив ArrayList в совместимый одномерный массив Array, начиная с заданного индекса целевого массива.

Копирует диапазон элементов из списка ArrayList в совместимый одномерный массив Array, начиная с указанного индекса целевого массива.

Определяет, равен ли указанный объект текущему объекту.

Возвращает оболочку ArrayList фиксированного размера.

Возвращает оболочку IList фиксированного размера.

Возвращает перечислитель для всего ArrayList.

Возвращает перечислитель для диапазона элементов в списке ArrayList.

Служит хэш-функцией по умолчанию.

Возвращает список ArrayList, представляющий подмножество элементов исходного списка ArrayList.

Возвращает объект Type для текущего экземпляра.

Осуществляет поиск указанного объекта Object и возвращает отсчитываемый от нуля индекс первого вхождения в коллекцию ArrayList.

Осуществляет поиск указанного объекта Object и возвращает отсчитываемый от нуля индекс первого вхождения в диапазоне элементов списка ArrayList, начиная с заданного индекса и до последнего элемента.

Выполняет поиск указанного объекта Object и возвращает отсчитываемый от нуля индекс первого вхождения в диапазоне элементов списка ArrayList, который начинается с заданного индекса и содержит указанное число элементов.

Вставляет элемент в коллекцию ArrayList по указанному индексу.

Вставляет элементы коллекции в список ArrayList в позиции с указанным индексом.

Осуществляет поиск указанного объекта Object и возвращает отсчитываемый от нуля индекс последнего вхождения в коллекцию ArrayList.

Осуществляет поиск указанного объекта Object и возвращает отсчитываемый от нуля индекс последнего вхождения в диапазоне элементов списка ArrayList, начиная с первого элемента и заканчивая элементом с заданным индексом.

Выполняет поиск указанного объекта Object и возвращает отсчитываемый от нуля индекс последнего вхождения в диапазоне элементов списка ArrayList, содержащем указанное число элементов и заканчивающемся в позиции с указанным индексом.

Создает неполную копию текущего объекта Object.

Возвращает программу-оболочку ArrayList, доступную только для чтения.

Возвращает программу-оболочку IList, доступную только для чтения.

Удаляет первое вхождение указанного объекта из коллекции ArrayList.

Удаляет элемент списка ArrayList с указанным индексом.

Удаляет диапазон элементов из списка ArrayList.

Возвращает список ArrayList, элементы которого являются копиями указанного значения.

Изменяет порядок элементов во всем списке ArrayList на обратный.

Изменяет порядок элементов в указанном диапазоне.

Копирует элементы коллекции в диапазон элементов списка ArrayList.

Сортирует элементы во всем списке ArrayList.

Сортирует элементы во всем списке ArrayList с помощью указанной функции сравнения.

Сортирует элементы в диапазоне элементов списка ArrayList с помощью указанной функции сравнения.

Возвращает синхронизированную (потокобезопасную) оболочку ArrayList.

Возвращает синхронизированную (потокобезопасную) оболочку IList.

Копирует элементы списка ArrayList в новый массив Object.

Копирует элементы списка ArrayList в новый массив с элементами указанного типа.

Возвращает строку, представляющую текущий объект.

Задает значение емкости, равное действительному количеству элементов в ArrayList.

Методы расширения

Приводит элементы объекта IEnumerable к заданному типу.

Выполняет фильтрацию элементов объекта IEnumerable по заданному типу.

Позволяет осуществлять параллельный запрос.

Преобразовывает коллекцию IEnumerable в объект IQueryable.

Применяется к

Потокобезопасность

Открытые статические ( Shared в Visual Basic) члены этого типа являются потокобезопасными. Потокобезопасная работа с членами экземпляров типа не гарантируется.

Может ArrayList одновременно поддерживать несколько модулей чтения, если коллекция не изменяется. Чтобы гарантировать потокобезопасность ArrayList, все операции должны выполняться через оболочку, возвращаемую методом Synchronized(IList) .

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

См. также раздел

  • IList
  • List
  • Выполнение строковых операций без учета языка и региональных параметров в коллекциях

Что такое ArrayList в C#?

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

Особенности:

  1. Динамическое управление размером: ArrayList автоматически изменяет свой размер при добавлении или удалении элементов, что упрощает работу с коллекцией.
  2. Хранение объектов различных типов: ArrayList может хранить элементы различных типов, что делает его удобным для сценариев, где необходимо работать с разнородными данными.
  3. Методы для добавления и удаления элементов: Класс предоставляет методы для добавления, удаления и изменения элементов коллекции.
// Пример использования ArrayList для хранения разнородных данных ArrayList mixedList = new ArrayList(); // Добавление элементов различных типов mixedList.Add(42); // Целое число mixedList.Add("Hello"); // Строка mixedList.Add(3.14); // Дробное число mixedList.Add(new object()); // Объект // Извлечение элементов из коллекции int firstItem = (int)mixedList[0]; // Приведение к типу string secondItem = mixedList[1].ToString(); // Приведение к строке // Удаление элемента из коллекции mixedList.Remove("Hello"); // Вывод результатов Console.WriteLine($"Первый элемент: "); Console.WriteLine($"Второй элемент: ");

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

Илья 26 декабря 2023 в 14:01

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *