Почему словарь предпочтительнее, чем Hashtable в C #?

Это форматирование по умолчанию, предоставляемое Oracle. Если вам нужны ведущие нули на выходе, вам необходимо явно указать формат. Используйте:

SELECT TO_CHAR(0.56,'0.99') FROM DUAL;

или даже:

SELECT TO_CHAR(.56,'0.99') FROM DUAL;

То же самое верно для конечных нулей:

SQL> SELECT TO_CHAR(.56,'0.990') val FROM DUAL;

VAL
------
 0.560

Общий вид преобразования TO_CHAR функция:

TO_CHAR (число, формат )

1311
задан kristianp 6 March 2019 в 00:56
поделиться

9 ответов

Если это имеет значение Словарь (концептуально) хэш-таблица.

, Если Вы имели в виду, "почему мы используем Dictionary<TKey, TValue> класс вместо Hashtable класс?", тогда это - легкий ответ: Dictionary<TKey, TValue> универсальный тип, Hashtable не. Это означает, что Вы получаете безопасность типов с Dictionary<TKey, TValue>, потому что Вы не можете вставить случайный объект в нее, и Вы не должны бросать значения, которые Вы вынимаете.

Интересно, Dictionary<TKey, TValue> реализация в Платформе.NET основана эти Hashtable, как можно сказать из этого комментария в его исходном коде:

универсальный Словарь был скопирован с источника Хеш-таблицы

Источник

1506
ответ дан Adrian 6 March 2019 в 00:56
поделиться

Эти Hashtable свободно введенная структура данных, таким образом, можно добавить ключи и значения любого типа к Hashtable. Dictionary класс является безопасным с точки зрения типов Hashtable реализация, и ключи и значения со строгим контролем типов. При создании Dictionary экземпляр, необходимо определить типы данных для обоих ключ и значение.

12
ответ дан Nate Barbettini 6 March 2019 в 00:56
поделиться

Люди говорят, что Словарь совпадает с хэш-таблицей.

Это не обязательно верно. Хэш-таблица является одним путем к реализация словарь. Типичный в этом, и это может быть по умолчанию в.NET в Dictionary класс, но это не по определению единственное.

Вы могли одинаково хорошо реализовать словарь с помощью связанного списка или дерева поиска, это просто не будет как эффективное (для некоторой метрики эффективных).

33
ответ дан DaveInCaz 6 March 2019 в 00:56
поделиться

Поскольку Dictionary универсальный класс (Dictionary<TKey, TValue>), так, чтобы доступ к его содержанию был безопасен с точки зрения типов (т.е. Вы не должны бросать от Object, как Вы делаете с Hashtable).

Выдерживают сравнение

var customers = new Dictionary<string, Customer>();
...
Customer customer = customers["Ali G"];

к

var customers = new Hashtable();
...
Customer customer = customers["Ali G"] as Customer;

Однако Dictionary, реализован как хэш-таблица внутренне, так технически она работает тот же путь.

173
ответ дан DaveInCaz 6 March 2019 в 00:56
поделиться

В.NET различие между Dictionary<,> и HashTable, прежде всего, что первый - универсальный тип, таким образом, Вы извлекаете всю пользу из дженериков с точки зрения статической проверки типа (и уменьшенная упаковка, но это не является столь большим, как люди склонны думать с точки зрения производительности - существует определенная стоимость памяти для упаковки, хотя).

67
ответ дан Marc Gravell 6 March 2019 в 00:56
поделиться

К вашему сведению: В.NET, Hashtable ориентировано на многопотоковое исполнение для использования несколькими потоками читателя и единственным потоком записи, в то время как в Dictionary общедоступные статические участники ориентированы на многопотоковое исполнение, но любые члены экземпляра, как гарантируют, не будут ориентированы на многопотоковое исполнение.

Мы должны были возвратить все наши Словари к Hashtable из-за этого.

84
ответ дан Peter Mortensen 6 March 2019 в 00:56
поделиться

Еще одно отличие, которое я могу выяснить, это:

Мы не можем использовать словарь ( дженерики) с веб-сервисами. Причина в том, что ни один стандарт веб-службы не поддерживает стандарт дженериков.

5
ответ дан 19 December 2019 в 20:15
поделиться

Обратите внимание, что MSDN говорит: «Словарь <(из <(of <(TKEY, TVALUE)>) в качестве хеш-таблица », а не «словарь <(из <(TKEY, TVALUE>) >) Класс реализован как Hashtable словарь «

»

, не реализуется как hastable, но он реализован после концепции хеш-таблица. Внедрение не связано с классом Hashtable из-за использования дженериков, хотя внутренне Microsoft могла бы использовать один и тот же код и заменил символы типа типа с помощью TwaLue.

в .NET 1.0 Generics не существовало; Это где начался хэш и арайлист.

11
ответ дан 19 December 2019 в 20:15
поделиться

Согласно тому, что я вижу при использовании .NET Reflector :

[Serializable, ComVisible(true)]
public abstract class DictionaryBase : IDictionary, ICollection, IEnumerable
{
    // Fields
    private Hashtable hashtable;

    // Methods
    protected DictionaryBase();
    public void Clear();
.
.
.
}
Take note of these lines
// Fields
private Hashtable hashtable;

Итак, мы можем быть уверены, что DictionaryBase внутренне использует HashTable.

-4
ответ дан 19 December 2019 в 20:15
поделиться