Должны ли мы использовать Generic Collection для повышения безопасности и производительности? - PullRequest
1 голос
/ 05 ноября 2008

Стоит ли использовать Generic Collection для повышения безопасности и производительности?

Ответы [ 3 ]

5 голосов
/ 05 ноября 2008

Конечно. Почему бы тебе? IMO важнее, чем производительность, тот факт, что универсальные API более выразительны. Это касается общих API, а не только коллекций.

РЕДАКТИРОВАТЬ: Просто, чтобы прояснить это немного:

  • Рабочие характеристики немного отличаются между универсальными и неуниверсальными коллекциями по причинам «они отличаются реализацией», а также со всей общей / неуниверсальной стороной. Очевидно, что универсальная версия избегает упаковки / распаковки и (в большинстве случаев) времени выполнения при получении. На практике это может иметь значение только для типов значений, где бокс вступает в игру. Для больших коллекций это различие в использовании памяти, которое, вероятно, будет более значительным, чем разница выполнения скорость .

  • Меня немного меньше беспокоит фактический аспект безопасности типов. Это, конечно, хорошо, но я не помню, чтобы когда-либо я видел ошибку при использовании неуниверсальных коллекций из-за ввода неверного типа (или извлечения его как неправильного типа). Это, конечно, выгода.

  • Я считаю выразительность очень важной. Я могу взглянуть на объявление метода и знать, чего ожидать от возвращаемого значения - мне не нужно читать документацию так же внимательно, или давать переменные в виде громоздких имен или документов. Кроме того, вы получаете все преимущества Intellisense и т. Д. Один из вопросов о языке - «что я могу выразить на нем?» и дженерики позволяют выражать гораздо более богатые концепции, чем раньше.

2 голосов
/ 05 ноября 2008

Абсолютно.

Обычная коллекция, такая как ArrayList, неявно хранит объекты.

Это означает, что при этом:

ArrayList list = new ArrayList();
list.Add(5);
list.Add("FooBar");

Является законным кодом. Это создает несколько проблем.

  • Как правило, вы не хотите хранить разные типы в одной коллекции, и проверять время компиляции это хорошо.
  • Когда вы сохраняете тип значения (например, целое число 5 выше), он должен быть помещен в ссылочный тип, прежде чем его можно будет сохранить в коллекции.
  • При чтении значения вы должны привести его обратно от Object к нужному типу.

Однако вы устраняете все эти проблемы, используя общий набор:

List<int> list = new List();
list.Add(5);
// Compile Time Error.
list.Add("FooBar")

Вы также получаете поддержку intellisense при работе непосредственно с индексами коллекции, а не просто с общим "object" intellisense.

1 голос
/ 05 ноября 2008

Краткий ответ: да

Более длинный ответ: нет никаких недостатков в использовании общих коллекций. Проверка типов во время компиляции исключает возможность ошибок во время выполнения. Производительность будет выше для встроенных типов, таких как целые числа, поскольку упаковка и распаковка не нужны (в отличие от универсальных коллекций Java, между прочим)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...