.NET: ArrayList против списка

В чем разница между ArrayList и List в VB.NET

13.12.2008 17:45:03
Ссылки на документы: ArrayList,List
Rory O'Kane 13.05.2013 17:13:31
5 ОТВЕТОВ
РЕШЕНИЕ

Списки массивов по существу устарели, так как они нетипизированы - вам нужно использовать приведения с ними - и они медленнее и менее эффективны для типов значений, потому что они требуют, чтобы элементы были помещены в коробку.

Общие списки были введены в .Net 2.0 и являются подходящим вариантом. Часто список лучше, чем массив, с несколькими недостатками.

Поскольку эти коллекции являются частью библиотеки базовых классов .Net, этот совет также применим к C # и к любому языку .Net, поддерживающему дженерики - он не относится только к VB.NET.

48
12.02.2010 00:45:27
Кроме того, List намного эффективнее с точки зрения использования памяти. См. Blogs.msdn.com/b/joshwil/archive/2004/04/13/112598.aspx
PapillonUK 20.06.2011 09:41:49

В List можно использовать универсальные шаблоны, чтобы в него можно было помещать только объекты определенных типов, чтобы у вас была дополнительная проверка типов и чтобы можно было сократить время обработки из-за упаковки и распаковки. Arraylist не может использовать это. Почти во всех случаях вы захотите использовать список, а не Arraylist.

2
13.12.2008 17:47:16
Обобщение было введено в .NEt 2.0, но эти классы существовали и до этого. Есть ли разница в том, как эти классы написаны внутри?
MOZILLA 13.12.2008 17:51:53
Если нет другого класса List, о котором я не знаю, то это неправильно. Полное пространство имен List - System.Collections.Generic.List, что означает, что он был в значительной степени специально добавлен для использования с Generics.
Kibbee 14.12.2008 01:53:20

Список является общей реализацией 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
14
13.12.2008 17:51:59
Конечно, технически вы всегда можете составить список, в котором хранится тип «Объект», и хранить в нем что-нибудь, потому что все по своей природе наследуется от объекта.
Kibbee 13.12.2008 17:55:24

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

Список (клиента) допускает только объект типа клиента и типы, которые наследуются от клиента, поэтому вы не можете делать такие ошибки.

Даже если вам нужно поместить объекты несвязанных типов в одну коллекцию, лучше выбрать List (Of Object), поскольку он явно указывает на то, что вы имеете дело с разными типами.

3
14.12.2008 05:02:40

Списки массивов еще более неэффективны при использовании в 64-битной среде для хранения примитивных элементов из-за ссылок на 64-битную память, в отличие от 32-битных ссылок на 32-битных компьютерах и бокса.

Смотрите это для более подробной информации: http://blogs.msdn.com/joshwil/archive/2004/04/13/112598.aspx

5
22.06.2009 03:03:24