ArrayList против списка <объект>

Я видел этот ответ Джона на Инициализировать универсальный объект неизвестным типом:

If you want a single collection to contain multiple unrelated types of values, however, you will have to use List<object>

Я сравниваю не ArrayList и List<>, а ArrayList и List<object>, поскольку оба будут отображать элементы типа object. Какая польза от использования любого из них в этом случае?

Обновлено: здесь нет заботы о безопасности типов, поскольку оба класса выставляют object в качестве своего элемента. Еще нужно привести object к желаемому типу. Меня больше интересует все, кроме безопасности типов.

Обновлено: Спасибо Марку Гравеллу и Шону за ответ. Извините, я могу выбрать только 1 в качестве ответа, поэтому я проголосую за оба.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
50
0
27 285
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

List <> - это типизированная версия ArrayList. Это гарантирует, что вы получите в коллекции тот же тип объекта.

Очевидно, я не имею в виду безопасность типов здесь

faulty 24.12.2008 12:47

Да, общие коллекции могут быть не только типизированными, но и быстрее.

Из MSDN (http://msdn.microsoft.com/en-us/library/system.collections.generic.aspx)

The System.Collections.Generic namespace contains interfaces and classes that define generic collections, which allow users to create strongly typed collections that provide better type safety and performance than non-generic strongly typed collections.

List<object> не дает вам особых улучшений в отношении безопасности типов и производительности по сравнению с использованием ArrayList. Большинство этих улучшений специфичны для List<T>, где T - это что угодно, кроме object.
Brian 11.02.2011 00:15

Одним из больших преимуществ использования List<object> является то, что в наши дни большая часть кода написана для использования общих классов / интерфейсов. Я подозреваю, что в наши дни большинство людей напишут метод, который использует IList<object> вместо IList. Поскольку ArrayList не реализует IList<object>, вы не сможете использовать список массивов в этих сценариях.

Я склонен думать о неуниверсальных классах / интерфейсах как о устаревшем коде и по возможности избегаю их.

В этом случае, если сравнивать ArrayList с List<Object>, то разницы в скорости вы не заметите. Могут быть некоторые различия в фактических методах, доступных для каждого из них, особенно в .NET 3.5 и методах подсчета расширений, но это больше связано с тем, что ArrayList несколько устарел, чем что-либо еще.

Ответ принят как подходящий

Вы сможете использовать методы расширения LINQ напрямую с List<object>, но не с ArrayList, если вы не вставите Cast<object>() / OfType<object> (спасибо IEnumerable<object> против IEnumerable). Это стоит немало, даже если вам не нужна безопасность типов и т. д.

Скорость будет примерно такой же; структуры по-прежнему будут помещены в коробку и т. д., поэтому больше не о чем их различать. За исключением того, что я склонен рассматривать ArrayList как «ой, кто-то снова пишет устаревший код ...» ;-p

Проведите сравнительный анализ, и вы узнаете, что работает лучше всего. Я предполагаю, что разница очень небольшая.

на самом деле я не уверен, что вопрос в производительности, но это хороший момент. я предполагаю, что производительность arraylist будет хуже из-за дополнительной упаковки, распаковки.

Anonymous Type 08.10.2010 04:56

@ Анонимный: Какой дополнительный бокс? ArrayList и List<object> должны иметь одинаковое количество боксов / распаковок.

Brian 11.02.2011 00:16

«одна коллекция, содержащая несколько несвязанных типов значений» - я понял, что при добавлении разных типов к объекту коллекции List происходила упаковка / распаковка, тогда как с arraylist этого не было. Думаю, я ошибаюсь в этом.

Anonymous Type 11.02.2011 03:53

Другие вопросы по теме