В чем разница между ArrayList и Hashtable в C #? - PullRequest
2 голосов
/ 21 июля 2011

Я хочу сохранить коллекцию данных в ArrayList или Hastable, но получение данных должно быть эффективным и быстрым. Я хочу знать, что структура данных скрывается между ArrayList и Hastable (т. Е. Связанный список, двойной связанный список)

Ответы [ 3 ]

6 голосов
/ 22 июля 2011

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>

.
2 голосов
/ 21 июля 2011

Хеш-таблица отобразит строковые значения в значения в вашей хеш-таблице. Arraylist помещает кучу предметов в нумерованный порядок.

Hastable ht = new Hastable();
ht("examplenum") = 5;
ht("examplenum2") = 7;
//Then to retrieve
int i = ht("example");  //value of 5

ArrayList al = new ArrayList();
al.Add(2);
al.Add(3);
//Then to retrieve
int j = al[0]  //value of 2
0 голосов
/ 21 июля 2011

Поскольку его имя подразумевает, что ArrayList (или List) реализован с помощью Array ... и фактически Hashtable также реализован с той же структурой данных.Таким образом, они оба имеют постоянную стоимость доступа (лучшую из всех возможных).

Вам нужно подумать о том, какой ключ вам нужен.Если ваши данные должны быть доступны с произвольным ключом (например, строкой), вы не сможете использовать ArrayList.Кроме того, Hashtable должен быть вашим предпочтительным выбором, если ключи не (более или менее) коррелируют.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...