HashSet<T> t = new HashSet<T>();
// add 10 million items
Dictionary<K, V> t = new Dictionary<K, V>();
// add 10 million items.
Wessen .Contains
Methode wird schneller zurückkehren?
Zur Verdeutlichung ist meine Anforderung, dass ich 10 Millionen Objekte (also wirklich Zeichenfolgen) habe, die ich überprüfen muss, ob sie in der Datenstruktur vorhanden sind. Ich werde nie wiederholen.
.net
performance
dictionary
hashset
halivingston
quelle
quelle
Antworten:
HashSet vs List vs Dictionary Leistungstest, von hier genommen .
1000000 Objekte hinzufügen (ohne Duplikate zu überprüfen)
Enthält die Prüfung für die Hälfte der Objekte einer Sammlung von 10000
Entfernen Sie die Hälfte der Objekte einer Sammlung von 10000
quelle
Ich nehme an, Sie meinen
Dictionary<TKey, TValue>
im zweiten Fall?HashTable
ist eine nicht generische Klasse.Sie sollten die richtige Sammlung für den Job basierend auf Ihren tatsächlichen Anforderungen auswählen. Haben Sie eigentlich wollen jede Taste auf einen Wert zuzuordnen? Wenn ja, verwenden Sie
Dictionary<,>
. Wenn Sie sich nur als Set dafür interessieren, verwenden SieHashSet<>
.Ich würde erwarten, dass (
HashSet<T>.Contains
undDictionary<TKey, TValue>.ContainsKey
das sind die vergleichbaren Operationen, vorausgesetzt, Sie verwenden Ihr Wörterbuch sinnvoll) im Grunde das Gleiche tun - sie verwenden im Grunde den gleichen Algorithmus. Ich denkeDictionary<,>
, wenn die Einträge größer sind, ist die Wahrscheinlichkeit, dass Sie den Cache aufblasen, größerDictionary<,>
als beiHashSet<>
, aber ich würde erwarten, dass dies unbedeutend ist, verglichen mit dem Schmerz, den falschen Datentyp einfach in Bezug auf das zu wählen, was Sie sind versuchen zu erreichen.quelle
Dictionary
aus anderen Gründen bereits eine haben, sollten Sie diese verwenden.Aus der MSDN-Dokumentation für Dictionary <TKey, TValue>
Mit einem Hinweis:
Ich weiß, dass Ihre Frage / Ihr Beitrag alt ist - aber als ich nach einer Antwort auf eine ähnliche Frage suchte, bin ich darauf gestoßen.
Hoffe das hilft. Scrollen Sie zum Abschnitt " Bemerkungen ", um weitere Informationen zu erhalten. https://msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx
quelle
Dies sind unterschiedliche Datenstrukturen. Auch gibt es keine generische Version von
HashTable
.HashSet
enthält Werte vom Typ T, dieHashTable
(oderDictionary
) Schlüssel-Wert-Paare enthalten. Sie sollten also die Erfassung der Daten auswählen, die gespeichert werden sollen.quelle
Die akzeptierte Antwort auf diese Frage beantwortet die Frage NICHT gültig! Es gibt zwar die richtige Antwort, aber diese Antwort wird durch die von ihnen vorgelegten Beweise nicht angezeigt.
Was diese Antwort zeigt, ist, dass Schlüsselsuchen auf einem
Dictionary
oderHashSet
viel schneller sind als auf einemList
. Das ist wahr, aber nicht interessant, weder überraschend noch ein Beweis dafür, dass sie die gleiche Geschwindigkeit haben.Ich habe den folgenden Code ausgeführt, um die Suchzeiten zu vergleichen, und meine Schlussfolgerung ist, dass sie tatsächlich die gleiche Geschwindigkeit haben. (Oder zumindest, wenn es einen Unterschied gibt, liegt der Unterschied innerhalb der Standardabweichung dieser Geschwindigkeit.)
Insbesondere 100.000.000 Suchvorgänge dauerten in diesem Test für mich zwischen 10 und 11,5 Sekunden.
Testcode:
quelle