Collections
& Generics
sind für den Umgang mit Gruppen von Objekten nützlich. In .NET fallen alle Sammlungsobjekte unter die Schnittstelle IEnumerable
die ihrerseits ArrayList(Index-Value))
& HashTable(Key-Value)
. Nach .NET Framework 2.0, ArrayList
& HashTable
wurden ersetzt durch List
& Dictionary
. Nun, die Arraylist
& HashTable
werden in heutigen Projekten nicht mehr verwendet.
Was den Unterschied zwischen HashTable
& Dictionary
, Dictionary
generisch ist, während Hastable
ist nicht generisch. Wir können jede Art von Objekt zu HashTable
aber beim Abrufen müssen wir sie in den gewünschten Typ umwandeln. Es ist also nicht typsicher. Aber zum dictionary
Bei der Deklaration können wir den Typ von Schlüssel und Wert angeben, so dass beim Abrufen kein Casting erforderlich ist.
Schauen wir uns ein Beispiel an:
HashTable
class HashTableProgram
{
static void Main(string[] args)
{
Hashtable ht = new Hashtable();
ht.Add(1, "One");
ht.Add(2, "Two");
ht.Add(3, "Three");
foreach (DictionaryEntry de in ht)
{
int Key = (int)de.Key; //Casting
string value = de.Value.ToString(); //Casting
Console.WriteLine(Key + " " + value);
}
}
}
Wörterbuch,
class DictionaryProgram
{
static void Main(string[] args)
{
Dictionary<int, string> dt = new Dictionary<int, string>();
dt.Add(1, "One");
dt.Add(2, "Two");
dt.Add(3, "Three");
foreach (KeyValuePair<int, String> kv in dt)
{
Console.WriteLine(kv.Key + " " + kv.Value);
}
}
}
32 Stimmen
> Dies ist nicht unbedingt richtig. Eine Hashtabelle ist eine Implementierung eines Wörterbuchs. Eine typische Implementierung, und sie mag die Standardimplementierung in .NET sein, aber sie ist nicht per Definition die einzige. Ich bin mir nicht sicher, ob dies vom ECMA-Standard gefordert wird, aber die MSDN-Dokumentation sehr deutlich, dass es als Hashtable implementiert ist. Sie bieten sogar die SortedList-Klasse für Zeiten, in denen eine Alternative sinnvoller ist.
25 Stimmen
@Promit Ich dachte immer, die
Dictionary
war eine Implementierung desHashtable
.2 Stimmen
Ich denke, der Grund dafür ist, dass man in einem Dictionary den Typ des Schlüssels und des Wertes selbst definieren kann. Die Hashtable kann nur Objekte aufnehmen und speichert die Paare basierend auf dem Hash (von object.GetHashCode() ).
0 Stimmen
Der ursprüngliche Titel der Frage war c#-spezifisch. Ich habe den Titel um "in c#" ergänzt.
3 Stimmen
Nicht zu verwechseln mit HashSet<T> die im Gegensatz zu
HashTable
ist generisch.