Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2016, 21:20   #1
hoz
Форумчанин
 
Аватар для hoz
 
Регистрация: 29.06.2013
Сообщений: 132
По умолчанию А нужны ли коллекции?

Перечитываю тему массивов, т.к. на практике пришлось столкнутся с некоторыми моментами, которые я не совсем понимаю. Узнал некоторые новые вещи. Но, в то же самое время, появились некоторые непонятки.
Вот, например, имеются динамические массивы, с которыми работают посредством класса ArraySort, а есть коллекции Queue.
Если с массивами я ещё когда писал на Си, работал, и назначение их я понимаю, то надобность коллекций для меня не понятна.
Зачем они вообще нужны? Ведь всё можно поместить в те же динамические массивы, тем более, они даже удобнее т.к. возможность работы даже не типизированными массивами имеется. Каково применение коллекций?
hoz вне форума Ответить с цитированием
Старый 01.04.2016, 21:28   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Как вы добавите элемент в массив (.Add) если вы изначально не знаете сколько вам понадобится?
Придется велосипедить свой List<T>/ArrayList/std::vector/... перевыделящий память (count + capacity).

Да и даже list.Add(item) явно удобнее, чем arr[count++] = item.

Аналогично про удаление элемента например.

А так вообще не нужно конечно, пишите на ассемблере.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 01.04.2016 в 21:41.
Alex11223 вне форума Ответить с цитированием
Старый 01.04.2016, 21:40   #3
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от hoz Посмотреть сообщение
Перечитываю тему массивов, т.к. на практике пришлось столкнутся с некоторыми моментами, которые я не совсем понимаю. Узнал некоторые новые вещи. Но, в то же самое время, появились некоторые непонятки.
Вот, например, имеются динамические массивы, с которыми работают посредством класса ArraySort, а есть коллекции Queue.
Если с массивами я ещё когда писал на Си, работал, и назначение их я понимаю, то надобность коллекций для меня не понятна.
Зачем они вообще нужны? Ведь всё можно поместить в те же динамические массивы, тем более, они даже удобнее т.к. возможность работы даже не типизированными массивами имеется. Каково применение коллекций?
Вообще-то, коллекции придуманы дебилами, которые хотят, выпендрится. По сути, это - набор классов (классы - объекты). Фиг знает каких? да в принципе и по-барабану.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 01.04.2016, 21:42   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Вообще-то, коллекции придуманы дебилами, которые хотят, выпендрится. По сути, это - набор классов (классы - объекты). Фиг знает каких? да в принципе и по-барабану.
они придуманы темы кто хочет упростить себе жизнь.
чтоб не писать велосипеды вечно.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.04.2016, 11:34   #5
hoz
Форумчанин
 
Аватар для hoz
 
Регистрация: 29.06.2013
Сообщений: 132
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Как вы добавите элемент в массив (.Add) если вы изначально не знаете сколько вам понадобится?
Придется велосипедить свой List<T>/ArrayList/std::vector/... перевыделящий память (count + capacity).

Да и даже list.Add(item) явно удобнее, чем arr[count++] = item.

Аналогично про удаление элемента например.

А так вообще не нужно конечно, пишите на ассемблере.
Ну так я про обычные массивы и не говорил. Речь идёт о динамических массивах-списках класса ArrayList. Размер задавать нет необходимости т.к. он динамический.
Так вот какой резон тогда в этом случае применять метод .AddRange не понятно. Ведь это лишено всякого смысла: в динамический массив добавляем коллекцию вместо того, чтоб добавить необходимое количество элементов. Зачем?
hoz вне форума Ответить с цитированием
Старый 02.04.2016, 11:41   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Непонятно о чем вы.

Начальное capacity задавать не обязательно, только в целях оптимизации если вы заранее знаете сколько понадобится.

.AddRange нужен чтоб не писать цикл только для того чтоб добавить больше 1 элемента (из другой коллекции и т.п.), что в нем непонятного? (ну и заодно AddRange наверно может уменьшить количество перевыделений памяти, чем если просто куча Add)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 02.04.2016 в 11:45.
Alex11223 вне форума Ответить с цитированием
Старый 02.04.2016, 12:25   #7
hoz
Форумчанин
 
Аватар для hoz
 
Регистрация: 29.06.2013
Сообщений: 132
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Непонятно о чем вы.

Начальное capacity задавать не обязательно, только в целях оптимизации если вы заранее знаете сколько понадобится.

.AddRange нужен чтоб не писать цикл только для того чтоб добавить больше 1 элемента (из другой коллекции и т.п.), что в нем непонятного? (ну и заодно AddRange наверно может уменьшить количество перевыделений памяти, чем если просто куча Add)
Непонятно то, что можно было бы добавить больше 1 элемента в список из обычного массива. Но кой сдались коллекции единственное что меня вводит в ступор в этом плане.
hoz вне форума Ответить с цитированием
Старый 02.04.2016, 12:33   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

какие конкретно коллекции вам непонятны?
отсутствие типизации у ArrayList играет злую шутку.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.04.2016, 12:36   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Вы о чем? Ничего непонятно.

А про AddRange,
Код:
list.AddRange(list2);
явно удобнее, чем
Код:
foreach (var item in list2)
    list.Add(item);
+ list'у будет сразу известно сколько в него хотят добавить и не будет лишних перевыделений памяти (на 4-м, 8-м, 16-м, ... элементе)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 02.04.2016 в 12:39.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
коллекции RAIDER_90 Общие вопросы по Java, Java SE, Kotlin 1 17.04.2012 22:02
коллекции Джава tanya_m43 Помощь студентам 1 28.01.2012 02:24
Java коллекции programmm Помощь студентам 0 12.11.2011 22:37
Коллекции van-ok Помощь студентам 0 25.12.2009 01:47
Коллекции Mike777 Общие вопросы Delphi 0 19.02.2007 11:38