![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
archeg |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 6.1.2007 Где: Киев Репутация: 11 Всего: 27 |
Почему в шарпе нету связаного списка? (если List<T> - на самом деле обертка над T[]) или я что-то пропустил?
![]()
-------------------- ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru) Дядька всегда можно спросить в аське, если не задалбывать - не откажет ![]() И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои ;) |
|||
|
||||
Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
archeg,
![]() -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
adLucem |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 17.4.2007 Где: Украина, Донецк Репутация: 4 Всего: 5 |
На каком основании такие заявления? tol05, ПРИВЕДИТЕ ПРИМЕР (Исходные данные, полученные метрики) - а свое мнение и пространные, большей частью бесполезные рассуждения можете оставить при себе. У Вас пальцы не устают столько флудить? |
|||
|
||||
ivashkanet |
|
||||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Товарищи, вот уж не думал, что эта тема разовьется в такой спор
![]() Мое мнение: если вы точно знаете размер вашей коллекции и он не изменяется, то однозначно лучше использовать массив (хотя очень часто я использую Лист и в этом случае, ибо он удобнее). Но если, вы не в курсе, сколько элементов будет у вас в массиве, то лучше использовать специализированную коллекцию. Одной из таких коллекций является List<string>. Причем дженерики ни коем образом не относятся к коллекциям, это просто удобный инструмент для создания шаблонных классов, работающих с любым конкретным типом, вместо того, чтобы плодить туеву хучу реализаций одной и той же логики для разных типов. Перейдем к реализации List<T>: Да, за дополнительные возможности нужно платить, тут уж не попишешь :( (Что тут у нас, а --- возможность добавления новых элементов без ресайза коллекции). Чем же мы расплачиваемся: В первую очередь памятью. Возможность "безболезненного" увеличения размера коллекции реализована за счет избыточности. Она храним "пустые" ячейки для новых элементов коллекции. Например, коллекция, состоящая из 10 элементов будет хранить 6 (=16-10) пустых ячеек. Во вторую очередь скоростью доступа. List<T> реализуется как обертка над массивом T[]. Так что при доступе к элементу коллекции мы, в любом случае, обращаемся к массиву:
Что у нас тут? Обращение к массиву (никуда от этого не деться) + трата времени на проверку индекса и сам вызов метода get. Не очень хорошо :( Вот две основные проблемы использования коллекции вместо простого массива. Есть и более мелкие проблемы, но эти две, ИМХО, самые важные (среди них никому не нужное поле version, которое хранить версию массива, получить которую не представляется возможным, да и нафик она кому нужна, ИМХО). Но, все же, несмотря на перечисленные проблемы коллекции MUST HAVE. Только одно динамическое увеличение размера по мере добавления элементов достойно бурных оваций и закрытию глаз на перечисленные выше "проблемы". Кроме того, я не зря взял слово "проблемы" в кавычки. Эти "проблемы" действительно не стоят того, чтобы на них обращать внимания в 99,99% случаев. Действительно: Память. Ну кого, скажите, волнует наличие неиспользованных 6*4 = 24 байт на хранение "резерва" в примере выше, когда совершенно пустое WinForm приложение занимает 4Мб памяти? Но все же если вы используете "сотни тысяч" таких коллекций, то стоит пересмотреть свою позицию (это та самая сотая процента) Производительность. Один запрос к диску, БД, да еще по сети, отображение UI, ожидание ответа пользователя, ... сводят на нет все проблемы связанные с доступом к элементу коллекции. Так что, если вы не пишите критическую часть приложения, которая будет юзаться "сотни тысяч раз" на протяжении 1 минуты, то можно забить и на эту проблему.
Один из которых статический, т.е. не имеет никакого отношения к конкретному экземпляру. Кроме того, на единичных операциях массивы бесспорно выигрывают, но при интенсивном добавлении новых элементов массивы нервно курят в сторонке. Пример: ты получаешь некие сообщения из нескольких источников (от геодезических зондов, например) и тебе нужно каждую минуту отправлять собранные сообщения дальше. Что лучше использовать?
Позволю себе не согласится. int[], как и любой struct[], является структурным типом, если он: локальная переменная, либо часть другой структуры. LinkedList<T> (хоть это и двусвязный список) |
||||||
|
|||||||
adLucem |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 17.4.2007 Где: Украина, Донецк Репутация: 4 Всего: 5 |
MSDN: Arrays (C# Programming Guide)
|
||||
|
|||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
adLucem, точно, только что протестил. И почему я думал по другому
![]() ![]() |
|||
|
||||
Exception |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Блин, tol05, ты меня не понял
![]() Во-первых, насчёт Mono, я имел в виду, что, если хочешь знать, как реализуется какой-то класс, то можно посмотреть в него, и призывать тебя что-то говорить начальнику или хотя бы самому юзать Mono я даже не собирался ![]() Насчёт дженериков, если ты решил что эта идея нова и "подсунута Билли", то ты сильно ошибаешься, так как она ещё более полно реализована в С++ (шаблоны) и многих других языках. Да и в Java они есть (хотя там это синтаксический сахар). Если ты не научился использовать какое-то средство языка разумно, не стоит делать преждевременных выводов о нём. Дженерики часто бывают полезны, например, при разработке и использовании многоцелевых каркасов приложений (типа CAB). Однако, само собой, их не надо лепить где попало, так как абстрагирование местами только усложняет проектное решение. Массив следует использовать, когда нужен массив, а список -- когда нужен список ![]() ![]() |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
![]() ![]() Да ладно... Действительно, правильно ivashkanet, выразился - если три-четыре горячих парня встретятся, то жди беды ![]() Генерики - не шаблоны. http://blogs.gotdotnet.ru/personal/mihaili...50-B21953401B95 Java - не смотрел, думал в отпуске заняться все, типа сдаюсь. ![]() -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |