Поделиться через


Коллекции как альтернатива массивам

Обновлен: Ноябрь 2007

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

Если требуется изменить размер массива, необходимо использовать Оператор ReDim (Visual Basic). После этого Visual Basic создает новый массив и освобождает предыдущий массив. Это занимает время выполнения. Таким образом, если число элементов при работе изменяется часто или нельзя предсказать максимальное число необходимых элементов, можно получить большую производительность при использовании коллекции.

Коллекция, которой не приходится создавать новый объект или копировать существующие элементы, может обрабатывать изменения размера за меньше время, чем массив, который должен использовать ReDim. Но если размер не изменяется или изменяется довольно редко, то массив, пожалуй, более эффективен. Как всегда, производительность в большей степени зависит от конкретного приложения. Часто стоит потратить время на то, чтобы испытать как массив, так и коллекцию.

Специализированные коллекции

.NET Framework также предоставляет набор классов, интерфейсов и структур для общих и специальных коллекций. Пространства имен System.Collections и System.Collections.Specialized содержат определения и реализации, включающие словари, списки, очереди и стеки. Пространство имен System.Collections.Generic предоставляет многие из этих универсальных версий, которые принимают один или несколько аргументов.

Если в коллекции хранятся элементы только одного определенного типа данных, то универсальная коллекция имеет преимущество принудительного типа безопасности. Дополнительные сведения об универсальных элементах содержатся в разделе Универсальные типы в Visual Basic.

Пример

Описание

В следующем примере используется .NET Framework универсальный класс System.Collections.Generic.List<T> для создания коллекции списка для структур customer.

Код

' Define the structure for a customer.
Public Structure customer
    Public name As String
    ' Insert code for other members of customer structure.
End Structure
' Create a module-level collection that can hold 200 elements.
Public custFile As New List(Of customer)(200) 
' Add a specified customer to the collection.
Private Sub addNewCustomer(ByVal newCust As customer)
    ' Insert code to perform validity check on newCust.
    custFile.Add(newCust)
End Sub
' Display the list of customers in the Debug window.
Private Sub printCustomers()
    For Each cust As customer In custFile
        Debug.WriteLine(cust)
    Next cust
End Sub

Примечания

Объявление коллекции custFile задает, что она может содержать только элементы типа customer. Она также имеет исходную емкость 200 элементов. Процедура addNewCustomer проверяет новый элемент на допустимость и затем добавляет его к коллекции. Процедура printCustomers использует цикл For Each для прохода по коллекции и отображения ее элементов.

См. также

Задачи

Практическое руководство. Объявление переменной типа массива

Практическое руководство. Создание массива

Практическое руководство. Инициализация переменной типа массива

Устранение неполадок, связанных с массивами

Основные понятия

Коллекции в Visual Basic

Универсальные типы в Visual Basic

Ссылки

Оператор ReDim (Visual Basic)

Другие ресурсы

Массивы в Visual Basic