Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Множества, хэши и т.д.


Автор: Bogdan1024 24.7.2007, 13:03
Вот иногда есть много всяких int'ов, и нужно их всех запомнить. Можно применить для этого Arraylist, но мсдн говорит что он медленный, можно применить для этого хэш-коллекцию (забыл как называется), но там ненужное свойство "Value" есть. Что использовать оптимальнее всего?

Автор: Idsa 24.7.2007, 13:13
Если ты уверен, что такой подход не доставит тебе проблем при отладке, а затем и при поддержке проекта (с символьными переменными гораздо проще разбираться, нежели с записями вроде list[5]), то следует использовать List<int>. Он и быстрее ArrayList, да и проверку типов осуществляет на этапе компиляции.

Автор: Bogdan1024 24.7.2007, 14:33
Ну, я под ArrayList имел List<int> ввиду smile

Автор: Idsa 24.7.2007, 14:53
Цитата(Bogdan1024 @  24.7.2007,  13:03 Найти цитируемый пост)
Можно применить для этого Arraylist, но мсдн говорит что он медленный

Цитата(Bogdan1024 @  24.7.2007,  14:33 Найти цитируемый пост)
Ну, я под ArrayList имел List<int> ввиду 

Ну и почему тогда он медленный?

Автор: Bogdan1024 24.7.2007, 15:07
При поиске значений хэш<int> теоретически быстрее. Дык вот я и думаю, а есть ли что-то быстрее хэша и эрэйлиста.

Автор: mihryak 24.7.2007, 15:40
Для хешируемых коллекций (SortedList, Dictionary, HashTable) помимо самого значения нужен ключ, причём уникальный. Если int-ы удовлетворяют этому требованию, то можно идля ключа использовать то же значение. Выгода будет в случае необходимости часто производить поиск по коллекции (занимает всегда О(1), при этом, если разумно задать Capacity, то и добавление будет тоже О(1)).

Иначе - List<int>. Про медленность - очень спорно, хоть поиск "в лоб" и занимает О(n), но обращение к элементам и их добавление  практически такое же, как и у массивов (он на базе массива и сделан, просто обернули удобными методами и автоматическим расширением).

Автор: kven 5.12.2007, 10:08
У меня такой вопрос. Если использовать просто ArrayList добавление какая сложность
удаление какая сложность максимум естественно. И поиск.
И насколько быстрее это в List<int>.
Просто у меня задача которая требует количество итераций не более log(n). Насколько возможно такая реализация.

И ещё 1 вопрос. При исползования нумератора для коллекции. Если я удаляю элемент с первой позиции это занимает O(1) шаг в arrayList или максимум O(n)?
Буду благодарен за ответы, чем быстрее тем лучше

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)