ArrayList vs List <объект>
Я увидел этот ответ от Jon на Инициализировать универсальный объект с неизвестным типом:
Если вы хотите, чтобы одна коллекция содержат несколько несвязанных типов ценности, однако, вам придется использовать List<object>
Я не сравниваю ArrayList
vs List<>
, а ArrayList
vs List<object>
, так как оба будут экспонировать элементы типа object
. Какая польза от использования одного в этом случае?
РЕДАКТОР: Это не касается безопасности типов здесь, так как оба класса подвергают object
как свой элемент. По-прежнему нужно отбрасывать от object
до нужного типа. Меня больше интересует все, кроме безопасности типов.
EDIT: Спасибо, Марк Гравелл и Шон за ответ. Извините, я могу выбрать только 1 в качестве ответа, поэтому я проголосую за оба.
Ответы
Ответ 1
Вы сможете использовать методы расширения LINQ напрямую с помощью List<object>
, но не с ArrayList
, если вы не введете Cast<object>()
/OfType<object>
(благодаря IEnumerable<object>
vs IEnumerable
). Это стоит совсем немного, даже если вам не нужна безопасность типов и т.д.
Скорость будет примерно одинаковой; структуры будут по-прежнему в коробке и т.д. - так что больше нечего им рассказывать. За исключением того, что я склонен видеть ArrayList
как "oops, кто-то снова пишет устаревший код..."; -p
Ответ 2
Одним из больших преимуществ использования List<object>
является то, что в наши дни большинство кода написано для использования общих классов/интерфейсов. Я подозреваю, что в наши дни большинство людей пишут метод, который принимает IList<object>
вместо IList
. Поскольку ArrayList
не реализует IList<object>
, вы не сможете использовать список массивов в этих сценариях.
Я склонен думать о не-общих классах/интерфейсах как устаревшем коде и избегать их, когда это возможно.
Ответ 3
В этом случае ArrayList
vs. List<Object>
, то вы не заметите различий в скорости. Могут быть некоторые различия в действительных методах, доступных для каждого из них, особенно в .NET 3.5 и подсчете методов расширения, но это больше связано с тем, что ArrayList несколько устарел, чем что-либо еще.
Ответ 4
Да, помимо типизации, общие коллекции могут быть быстрее.
Из MSDN (http://msdn.microsoft.com/en-us/library/system.collections.generic.aspx)
System.Collections.Genericпространство имен содержит интерфейсы и классы, определяющие общие коллекции, которые позволяют пользователям создавать строго типизированные коллекции, которые обеспечить лучшую безопасность и производительность, чем не общие типизированных коллекций.
Ответ 5
Сделайте несколько тестов, и вы узнаете, что лучше всего работает. Я хочу, чтобы разница была очень маленькой.
Ответ 6
List < > - это типичная версия ArrayList. Это гарантирует, что вы получите тот же тип объекта в коллекции.