




Список может использовать универсальные шаблоны, чтобы в него можно было помещать только объекты определенных типов, чтобы можно было выполнять дополнительную проверку типов и сократить время обработки за счет упаковки и распаковки. Arraylist не может это использовать. Почти во всех случаях вы захотите использовать List, а не Arraylist.
Обобщения были введены в .NEt 2.0, но эти классы существовали и до этого. Есть ли разница во внутреннем написании этих классов?
Это неверно, если нет другого класса List, о котором я не знаю. Полное пространство имен List - это System.Collections.Generic.List, что означает, что оно было специально добавлено для использования с Generics.
ArrayLists по сути устарели, поскольку они нетипизированы - вам нужно использовать с ними приведение - и они медленнее и менее эффективны для типов значений, потому что они требуют, чтобы элементы были упакованы в коробку.
Общие списки были введены в .Net 2.0 и являются подходящим вариантом. Часто список лучше, чем массив, но с некоторыми недостатками.
Поскольку эти коллекции являются частью библиотеки базовых классов .Net, этот совет также применим к C# и к любому языку .Net, который поддерживает обобщенные типы - это не относится к VB.NET.
Кроме того, List намного эффективнее с точки зрения использования памяти. См. blogs.msdn.com/b/joshwil/archive/2004/04/13/112598.aspx
Список - это общая реализация ArrayList. ArrayList хранит все объекты как System.Object, которые вам нужно затем привести к соответствующему типу. ArrayLists неоднородны, List может хранить только один тип объектов - этот тип указан в качестве его универсального параметра.
List<string> strList; // can store only strings
List<int> intList; // can store only ints
ArrayList someList; // can store anything
Конечно, технически вы всегда можете составить список, в котором хранится тип «Object», и хранить в нем что угодно, потому что все по своей сути наследуется от объекта.
ArrayList позволяет вам написать это:
Dim customers as new ArrayList
Dim c as new Customer
Dim m as new Manager
customers.Add(c)
customers.Add(m)
'This will cause an exception '
For each c as Customer in customers
console.writeline(c.Name)
Next
Список (of Customer) допускает только объекты типа Customer и типы, которые наследуются от Customer, поэтому вы не можете совершать такие ошибки.
Даже если вам нужно поместить объекты несвязанных типов в одну и ту же коллекцию, List (Of Object) - лучший выбор, поскольку он явно указывает на то, что вы имеете дело с разными типами.
ArrayLists еще более неэффективны при использовании на 64-битных системах для хранения примитивных элементов из-за 64-битных ссылок на память в отличие от 32-битных ссылок на 32-битных машинах и бокса.
См. Это для более подробной информации: http://blogs.msdn.com/joshwil/archive/2004/04/13/112598.aspx
Ссылки на документы:
ArrayList,List