в чем отличие коллекции и массива группы связанных объектов
Отличие коллекций от массивов
Из практики лучше работать с коллекциями чем с массивами. Но вот конкретно почему не понятно. Потому что коллекции параметризируются объектами, а не примитивами?, так и массивы тоже могут иметь тип добавляемых значений, по массиву можно так же проитерироваться как и по коллекции, также существуют Util классы как для массивов так и для коллекций. Нужен ответ на следующие вопросы:
2 ответа 2
Мне кажется, что вы путаете понятия. Если вам достаточно функционала массива, то используйте его, проблем никаких. Но в коллекциях значительно больше возможностей найти что-то действительно подходящее под задачи.
Классический алгоритм выбора коллекции (для Java под рукой нет, у кого есть замените, но идея от этого не изменится):
Безусловно любой алгоритм и любую структуру из коллекций можно реализовать самому, но зачем.
Непосредственно по вопросам:
В них больше функционала, делать это над массивами зачастую нецелесообразно (или плохое качество кода или долго реализовывать или требуют хорошего понимания алгоритмов).
Когда лучше использовать массивы, чем коллекции?
Когда нужно хранить набор данных фиксированного размера. Смотри картинку с выбором.
Давайте по порядку:
При этом компилятор ни разу не скажет, что это не правильно.
Коллекции (C#)
Во многих приложениях требуется создавать группы связанных объектов и управлять ими. Существует два способа группировки объектов: создать массив объектов и создать коллекцию.
Массивы удобнее всего использовать для создания фиксированного числа строго типизированных объектов и работы с ними. Информацию о массивах см. в разделе Массивы.
Коллекции предоставляют более гибкий способ работы с группами объектов. В отличие от массивов, коллекция, с которой вы работаете, может расти или уменьшаться динамически при необходимости. Некоторые коллекции допускают назначение ключа любому объекту, который добавляется в коллекцию, чтобы в дальнейшем можно было быстро извлечь связанный с ключом объект из коллекции.
Коллекция является классом, поэтому необходимо объявить экземпляр класса перед добавлением в коллекцию элементов.
Если коллекция содержит элементы только одного типа данных, можно использовать один из классов в пространстве имен System.Collections.Generic. Универсальная коллекция обеспечивает строгую типизацию, так что в нее нельзя добавить другие типы данных. При извлечении элемента из универсальной коллекции не нужно определять или преобразовывать его тип данных.
Содержание раздела
Использование простой коллекции
В приведенном ниже примере создается список строк, а затем выполняется перебор строк с помощью оператора foreach.
Если содержимое коллекции известно заранее, для ее инициализации можно использовать инициализатор коллекции. Дополнительные сведения см. в разделе Инициализаторы объектов и коллекций.
Следующий пример аналогичен предыдущему за исключением того, что для добавления элементов в коллекцию используется инициализатор коллекции.
В приведенном ниже примере элемент удаляется из коллекции путем указания удаляемого объекта.
Виды коллекций
В этом разделе описываются следующие часто используемые классы коллекций:
Классы System.Collections.Generic
Универсальную коллекцию можно создать, используя один из классов в пространстве имен System.Collections.Generic. Универсальная коллекция применяется в том случае, если все элементы в коллекции имеют одинаковый тип данных. Универсальная коллекция обеспечивает строгую типизацию, позволяя добавлять данные только необходимого типа.
В таблице ниже перечислены некоторые из часто используемых классов пространства имен System.Collections.Generic.
Классы System.Collections.Concurrent
Классы пространства имен System.Collections.Concurrent следует использовать вместо соответствующих типов пространств имен System.Collections.Generic и System.Collections, если несколько потоков параллельно обращаются к такой коллекции. Дополнительные сведения см. в статьях Потокобезопасные коллекции и System.Collections.Concurrent.
Классы System.Collections
В следующей таблице перечислены некоторые из часто используемых классов пространства имен System.Collections :
Класс | Описание |
---|---|
ArrayList | Представляет массив объектов, размер которого динамически увеличивается по мере необходимости. |
Hashtable | Представляет коллекцию пар «ключ-значение», которые упорядочены по хэш-коду ключа. |
Queue | Представляет коллекцию объектов, которая обслуживается в порядке поступления (FIFO). |
Stack | Представляет коллекцию объектов, которая обслуживается в обратном порядке (LIFO). |
Пространство имен System.Collections.Specialized предоставляет специализированные и строго типизированные классы коллекций, такие как коллекции строк, связанные списки и гибридные словари.
Реализация коллекции пар «ключ-значение»
Универсальная коллекция Dictionary позволяет получить доступ к элементам коллекции с помощью ключа каждого элемента. Каждый элемент, добавляемый в словарь, состоит из значения и связанного с ним ключа. Извлечение значения по его ключу происходит быстро, так как класс Dictionary реализован как хэш-таблица.
В приведенном ниже примере используется метод ContainsKey и свойство Item[] Dictionary для быстрого поиска элемента по ключу. Свойство Item позволяет получить доступ к элементу в коллекции elements с помощью кода elements[symbol] в C#.
В приведенном ниже примере вместо этого используется метод TryGetValue для быстрого поиска элемента по ключу.
Использование LINQ для доступа к коллекции
Для доступа к коллекции можно использовать язык LINQ. Запросы LINQ обеспечивают возможности фильтрации, упорядочения и группировки. Дополнительные сведения см. в разделе Приступая к работе с LINQ в C#.
Сортировка коллекции
Каждый вызов метода CompareTo выполняет одно сравнение, используемое для сортировки. Написанный пользователем код в методе CompareTo возвращает значение для каждого сравнения текущего объекта с другим объектом. Возвращаемое значение меньше нуля, если текущий объект меньше другого объекта, больше нуля, если текущий объект больше другого объекта, и равняется нулю, если объекты равны. Это позволяет определить в коде условия для отношения «больше», «меньше» и «равно».
Определение настраиваемой коллекции
Вы можете определить коллекцию, реализовав интерфейс IEnumerable или IEnumerable.
Iterators
Итератор вызывается с помощью оператора foreach. Каждая итерация цикла foreach вызывает итератор. При достижении оператора yield return в итераторе возвращается выражение, и текущее расположение в коде сохраняется. При следующем вызове итератора выполнение возобновляется с этого места.
Дополнительные сведения см. в разделе Итераторы (C#).
JavaScript: использование коллекций (Sets) и сравнение с массивами
Частичные перевод статьи «How to make your code faster using JavaScript Sets» с сайта medium.com
Я уверен, что большинство разработчиков привыкли использовать базовые типы в JavaScript: number, string, object, array, boolean.
Для большинства случаев этого вполне достаточно. Но если вы хотите сделать вам код максимально быстрым и масштабируемым — базовых типов может не хватить.
В этой статье мы поговорим как JavaScript Sets могут сделать ваш код быстрее, особенно если растет кодовая база. Есть много общего между Коллекциями и Массивами. Но использование коллекций часто придает скорости, чего невозможно достичь с Массивами.
В чем разница
Самое важное отличие Коллекций от Массивов в том, что массив это индексированная коллекция. Иными словами элементы массива отсортированы по их индексам.
С другой же стороны, коллекции не имеют индексов. Их элементы итерируемы в порядке их добавления и обязаны быть уникальными.
В чем преимущества
В прямом сравнении коллекции имеют несколько преимуществ на массивами, особенно если говорить о скорости выполнения:
Сложность выполнения
У коллекций же основные методы имеют сложность O(1) — размер коллекции никак не влияет на скорость выполнения.
Примеры
Создание объекта коллекции
Операции с элементами
Другие примеры работы с коллекциями
На этом все. Если вы еще не работали с коллекциями — надеюсь я продемонстрировал насколько они могут быть полезны.
Различия между массивом и любой коллекцией из Java Collection framework?
Как говорится в заголовке, я рассматриваю «различия между массивом и любой коллекцией из Java Collection framework».
думал, что это достаточно высокий уровень, чтобы обеспечить хорошее понимание некоторым (или многим) из нас, кто знает слишком мало об этом или нужно думать слишком долго, чтобы придумать интересный ответ
до сих пор я придумал:
пожалуйста, поправьте меня, если это были неправильные предположения, и, конечно, добавьте свои собственные ответы
4 ответов
они практически unreleated, кроме сказать, что они обе-магазин группы ценностей.
С точки зрения возможностей, в то время как оба могут хранить ссылки на объекты:
одно важное отличие, обычно не понимаемое программистами, новыми для java, является одним из удобство использования и удобство, особенно учитывая, что коллекции автоматически расширяются по размеру при необходимости:
массивы в конечном счете являются единственным способом хранения группы примитивов/ссылок в одном объекте, но они являются наиболее базовым вариантом. Хотя массивы могут дать вам некоторые преимущества скорости, если вы нужно супер-быстрый код, коллекции предпочтительнее, потому что у них так много удобства.
существует 5 различий между массивом и коллекцией, как показано ниже:
массивы фиксированы по размеру, тогда как некоторые коллекции могут расти в природе.
массивы хранят однородные данные. Коллекции хранят как однородные, так и разнородные данные.
в массивах нет подчеркивающих структур данных, тогда как коллекции имеют подчеркивающие структуры данных.
массивы рекомендуется для производительности, в то время как коллекции-нет.
массивы используют больше пространства памяти по сравнению с коллекциями.
6 разница между массивы и коллекции следующие:
Чем отличается коллекция от массива?
Чем макрос отличается от процедуры (в Excel)?
Вот такой код (обработчик кнопки, размещенной на листе Excel): Private Sub CommandButton1_Click().
Чем отличается WordBasic от visual basic и зачем он вообще нужен?
чем отличается WordBasic от visual basic и зачем он вообще нужен
Чем List<>, отличается от массива?
Чем List<>, отличается от массива?
Чем отличается List от массива?
Прошу разъяснить мне, что лучше использовать для хранения Ников: List или массив? Чет не понял как.
У массивов и коллекций имеются следующие плюсы и минусы:
Плюсы:
Более высокое быстродействие по сравнению с коллекциями.
Занимают меньше памяти, т.к. не требуют хранения ссылок на каждый элемент массива.
Минусы:
Занимают фиксированную область в памяти. При необходимости можно выделить для массива новую область памяти с помощью ReDim Preserve, но тогда системе понадобится потратить время на перенос значений из старой области памяти в новую.
Могут хранить элементы только одного типа, так как при хранении различных типов невозможно (или очень трудоемко) вычислить позицию n-ого элемента массива.
Плюсы:
Занимают произвольную область памяти, могут хранить любое разумное количество элементов.
Могут хранить элементы различных типов, так как позиция элемента коллекции в памяти не вычисляется, а берется из ссылки.
Минусы:
Работают медленно.
Занимают больше памяти, так как помимо самих элементов коллекции требуется хранить еще ссылки на эти элементы.
Особенности массивов и коллекций
(это не плюсы и не минусы, просто особенности)
Массив относится к типу данных значений. При копировании одной переменной типа массива в другую получаем новый независимый массив.