| 

.NET C# Java Javascript Exception

5
Gibt es einen signifikanten Unterschied zwischen einem Dictionary und einer Liste mit einem KeyValuePair?

Kleines Beispiel:
//1
Dictionary<int, object > dicAlleKunden = new Dictionary<int, object>();

//2
List<KeyValuePair<int, object>> listAlleKunden = new List<KeyValuePair<int, object>>();


Ich kann beide fast gleich Benutzen und von der Performance her verhalten sich beide gleich. Gibt es einen wesentlichen Unterschied?
News:
18.10.2011
Bibo1987 256 1 8
1 Antwort
2
Ja, gibt es: in der Liste kannst Du mehrere Einträge mit dem gleichen Key haben, im Dictionary dagegen immer nur einen. Außerdem ist die Semantik des Indexers eine andere:
dicAlleKunden[1] liefert den Kunden zum Schlüssel 1, listAlleKunden[1] liefert den zweiten Eintrag in der Liste, egal welchen Schlüssel der hat.
18.10.2011
Matthias Hlawatsch 13,2k 4 9
1
man könnte fast sagen, das Dictionary ist ähnlich einer Datenbanktabelle mit einer Unique-ID... und an dem Beispiel der Kunden würde das Dictionary besser passen :)
Karill Endusa 18.10.2011
Das Dictionary ist auf Zugriff über den Schlüssel optimiert. Wenn du also den Kunden mit id 42 suchst kann die Performance gar nicht gleich sein, weil du im ersten Fall eine Liste durchsuchen musst (O(n))
puls200 18.10.2011
Argh, ich meinte natürlich im zweiten Fall mit dem KeyValuePair ;-)
puls200 18.10.2011
Das werde ich auf jeden Fall gleich einmal ausprobieren, ob durch Verwendung des Dictionarys meine Abfragen günstiger erledigt werden.
Bibo1987 18.10.2011
Sollte so sein, da ja ein Direktzugriff auf einen Eintrag im Dictionary direkt über den Schlüssel ausgeführt werden kann. Bei der Liste selbst musst du ja erst einmal über die Einträge iterieren, bis du zum gesuchten kommst.
... außerdem ist bei der List<KeyValuePay<,>> die Gefahr groß, mehrere Einträge mit gleichem Key zu haben :)
Karill Endusa 18.10.2011
Entschuldigt, schreibfehler, KeyValuePay -> KeyValuePair :(
Karill Endusa 18.10.2011

Stelle deine List-Frage jetzt!