ArrayList
- это динамический массив, который увеличивается по мере добавления новых элементов, выходящих за пределы текущей емкости списка. Элементы в ArrayList доступны по индексу, как массив.
Hashtable
- хэш-таблица за кулисами. Базовая структура данных обычно представляет собой массив, но вместо доступа через индекс вы получаете доступ через ключевое поле, которое сопоставляется с местоположением в хеш-таблице, вызывая метод GetHashCode()
ключевого объекта.
В целом, ArrayList
и Hashtable
не рекомендуется в .NET 2.0 и выше в пользу List<T>
и Dictionary<TKey, TValue>
, которые являются намного лучшими универсальными версиями, которые работают лучше и не имеют затрат на упаковку для типов значений. .
У меня есть запись в блоге, в которой сравниваются различные преимущества каждого из общих контейнеров, которые могут быть полезны:
http://geekswithblogs.net/BlackRabbitCoder/archive/2011/06/16/c.net-fundamentals-choosing-the-right-collection-class.aspx
В то время как речь идет, в частности, об общих коллекциях, ArrayList
будет иметь такие же издержки сложности, что и List<T>
и Hashtable
Dictionary<TKey, TValue>
.