Datenstrukturen: Unterschied zwischen den Versionen
Aus Das Sopra Wiki
LeonH (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
|||
(18 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{ | {{UEA|Dietsch|Hier sollte noch ein einleitender Text stehen}} | ||
{{löschen}} | |||
== Hinweise | {{Navi:Implementierung}} | ||
== Hinweise == | |||
*Falls nicht anders angegeben sind Laufzeiten immer Average Case. | * Falls nicht anders angegeben sind Laufzeiten immer Average Case. | ||
*Alle Links zu den Datenstrukturen zeigen auf die englische Version der [http://msdn.microsoft.com/en-us/ MSDN]. Diese ist typischerweise vollständiger und genauer als ihre [http://msdn.microsoft.com/de-de/ deutsche Übersetzung]. | *Alle Links zu den Datenstrukturen zeigen auf die englische Version der [http://msdn.microsoft.com/en-us/ MSDN]. Diese ist typischerweise vollständiger und genauer als ihre [http://msdn.microsoft.com/de-de/ deutsche Übersetzung]. | ||
Zeile 26: | Zeile 26: | ||
! colspan="6" | Laufzeiten | ! colspan="6" | Laufzeiten | ||
| colspan="3" class="blank" | <br> | |||
| class="blank" | <br> | |||
|- | |- | ||
| class="blank" | <br> | | class="blank" | <br> | ||
! Add | ! width="50px"| Add | ||
! Remove | ! Remove | ||
Zeile 51: | Zeile 51: | ||
! [http://msdn.microsoft.com/en-us/library/bb359438.aspx HashSet<T>] | ! [http://msdn.microsoft.com/en-us/library/bb359438.aspx HashSet<T>] | ||
| O(1)<br>O(n) | | O(1) <br> O(n)<ref name="countlargercapacity"> Wenn Count + 1 > Capacity.</ref> | ||
| O(1) | | O(1) | ||
Zeile 91: | Zeile 91: | ||
! [http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx List<T>] | ! [http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx List<T>] | ||
| O(1)<br>O(n) | | O(1)<br>O(n)<ref name="countlargercapacity" /> | ||
| O(n) | | O(n) | ||
Zeile 111: | Zeile 111: | ||
! [http://msdn.microsoft.com/en-us/library/7977ey2c.aspx Queue<T>] | ! [http://msdn.microsoft.com/en-us/library/7977ey2c.aspx Queue<T>] | ||
| O(1)<br>O(n) | | O(1)<br>O(n)<ref name="countlargercapacity" /> | ||
| O(1)<br> | | O(1)<br> | ||
Zeile 134: | Zeile 134: | ||
! [http://msdn.microsoft.com/en-us/library/3278tedw.aspx Stack<T>] | ! [http://msdn.microsoft.com/en-us/library/3278tedw.aspx Stack<T>] | ||
| O(1)<br>O(n) | | O(1)<br>O(n)<ref name="countlargercapacity" /> | ||
| O(1)<br> | | O(1)<br> | ||
Zeile 154: | Zeile 154: | ||
! [http://msdn.microsoft.com/en-us/library/ms668265.aspx SynchronizedCollection<T>] | ! [http://msdn.microsoft.com/en-us/library/ms668265.aspx SynchronizedCollection<T>] | ||
| O(1)<br>O(n) | | O(1)<br>O(n)<ref name="countlargercapacity" /> | ||
| O(n)<br> | | O(n)<br> | ||
Zeile 191: | Zeile 191: | ||
| class="blank" | | | class="blank" | | ||
! colspan="5" | Laufzeiten | ! colspan="5" | Laufzeiten | ||
| class="blank" | | | colspan="3" class="blank" | <br> | ||
|- | |- | ||
| class="blank" | | | class="blank" | | ||
! Add | ! width="50px" | Add | ||
! Remove | ! Remove | ||
! ContainsKey | ! ContainsKey | ||
Zeile 204: | Zeile 204: | ||
|- | |- | ||
! [http://msdn.microsoft.com/en-us/library/xfhwa508.aspx Dictionary<TKey, TValue>] | ! [http://msdn.microsoft.com/en-us/library/xfhwa508.aspx Dictionary<TKey, TValue>] | ||
| O(1)<br>O(n) | | O(1)<br>O(n)<ref name="countlargercapacity" /> | ||
| O(1) | | O(1) | ||
| O(1) | | O(1) | ||
Zeile 224: | Zeile 224: | ||
|- | |- | ||
! [http://msdn.microsoft.com/en-us/library/system.collections.hashtable.aspx Hashtable] | ! [http://msdn.microsoft.com/en-us/library/system.collections.hashtable.aspx Hashtable] | ||
| O(1)<br>O(n) | | O(1)<br>O(n)<ref name="countlargercapacity" /> | ||
| O(1) | | O(1) | ||
| O(1) | | O(1) | ||
Zeile 247: | Zeile 247: | ||
Alle Eigenschaften und Bemerkungen aus der vorherigen Sektion gelten auch hier. | Alle Eigenschaften und Bemerkungen aus der vorherigen Sektion gelten auch hier. | ||
Das ursprüngliche Logfile kann [[Media:datastructure_speed_log.txt|hier]] eingesehen werden. | |||
Die | Die Messungen wurden mit folgenden Parametern durchgeführt: | ||
* | * erste Messung: Elemente vom Typ Int32 | ||
** Alle Messungen wurden mit <tt>System.Diagnostics.Stopwatch</tt> durchgeführt. | ** Alle Messungen wurden mit <tt>System.Diagnostics.Stopwatch</tt> durchgeführt. | ||
** Es wurden 100.000 zufällige und disjunkte Werte erzeugt (zwischen 0 und Int32.Max) und in einem Array gespeichert. | ** Es wurden 100.000 zufällige und disjunkte Werte erzeugt (zwischen 0 und Int32.Max) und in einem Array gespeichert. | ||
** Diese Werte wurden für die | ** Diese Werte wurden für die Messungen Add (mit [[foreach]]), Remove (mit [[for]]), ElementAt (mit [[for]]) und Contains (mit [[for]]) aus diesem Array extrahiert. | ||
* | * zweite Messung: Elemente vom Typ Testobject (Objekt das ein Attribut <tt>value</tt> (Int32) besitzt und dieses für Vergleiche und Hashcode benutzt) | ||
** Alle Messungen wurden mit <tt>System.Diagnostics.Stopwatch</tt> durchgeführt. | ** Alle Messungen wurden mit <tt>System.Diagnostics.Stopwatch</tt> durchgeführt. | ||
** Es wurden 100.000 zufällige und disjunkte Objekte erzeugt (mit <tt>value</tt> zwischen 0 und Int32.Max) und in einem Array gespeichert. | ** Es wurden 100.000 zufällige und disjunkte Objekte erzeugt (mit <tt>value</tt> zwischen 0 und Int32.Max) und in einem Array gespeichert. | ||
** Diese Objekte wurden für die | ** Diese Objekte wurden für die Messungen Add (mit [[foreach]]), Remove (mit [[for]]), ElementAt (mit [[for]]) und Contains (mit [[for]]) aus diesem Array extrahiert. | ||
=== Int32 (value-type) === | === Int32 (value-type) === | ||
Zeile 268: | Zeile 268: | ||
! colspan="6" | Laufzeiten | ! colspan="6" | Laufzeiten | ||
|- | |- | ||
| class="blank" | <br> | | class="blank" | <br> | ||
Zeile 349: | Zeile 349: | ||
| 0ms <ref name="clear"/> | | 0ms <ref name="clear"/> | ||
| class="close" | | | class="close" | 10ms<ref name="countenumerate"/> | ||
|- | |- | ||
Zeile 374: | Zeile 374: | ||
| class="blank" | | | class="blank" | | ||
! colspan="5" | Laufzeiten | ! colspan="5" | Laufzeiten | ||
|- | |- | ||
| class="blank" | | | class="blank" | | ||
Zeile 384: | Zeile 384: | ||
|- | |- | ||
! [http://msdn.microsoft.com/en-us/library/xfhwa508.aspx Dictionary<TKey, TValue>] | ! [http://msdn.microsoft.com/en-us/library/xfhwa508.aspx Dictionary<TKey, TValue>] | ||
| | | 8ms / 4ms | ||
| | | 3ms | ||
| | | 4ms | ||
| | | 0ms <ref name="clear"/> | ||
| class="close" | | | class="close" | 0ms <ref name="count"/> | ||
|- | |- | ||
! [http://msdn.microsoft.com/en-us/library/f7fta44c.aspx SortedDictionary<TKey, TValue>] | ! [http://msdn.microsoft.com/en-us/library/f7fta44c.aspx SortedDictionary<TKey, TValue>] | ||
| | | 50ms | ||
| | | 59ms | ||
| | | 30ms | ||
| | | 0ms <ref name="clear"/> | ||
| class="close" | | | class="close" | 0ms <ref name="count"/> | ||
|- | |- | ||
! [http://msdn.microsoft.com/en-us/library/system.collections.hashtable.aspx Hashtable] | ! [http://msdn.microsoft.com/en-us/library/system.collections.hashtable.aspx Hashtable] | ||
| | | 24ms / 10ms | ||
| | | 9ms | ||
| | | 8ms | ||
| | | 0ms <ref name="clear"/> | ||
| class="close" | | | class="close" | 0ms <ref name="count"/> | ||
|- | |- | ||
! [http://msdn.microsoft.com/en-us/library/ms132319.aspx SortedList<TKey, TValue>] | ! [http://msdn.microsoft.com/en-us/library/ms132319.aspx SortedList<TKey, TValue>] | ||
| | | 3.190ms | ||
| | | 3.147ms | ||
| | | 20ms | ||
| | | 0ms <ref name="clear"/> | ||
| class="close" | | | class="close" | 0ms <ref name="count"/> | ||
|} | |} | ||
=== Testobject (reference-Typ) === | === Testobject (reference-Typ) === | ||
==== ein-elementige Datenstrukturen ==== | ==== ein-elementige Datenstrukturen ==== | ||
Zeile 420: | Zeile 421: | ||
! colspan="6" | Laufzeiten | ! colspan="6" | Laufzeiten | ||
|- | |- | ||
| class="blank" | <br> | | class="blank" | <br> | ||
Zeile 438: | Zeile 439: | ||
! [http://msdn.microsoft.com/en-us/library/bb359438.aspx HashSet<T>] | ! [http://msdn.microsoft.com/en-us/library/bb359438.aspx HashSet<T>] | ||
| | | 19ms / 13ms | ||
| | | 13ms | ||
| | | 76.329ms | ||
| | | 14ms | ||
| 0ms | | 0ms <ref name="clear"/> | ||
| class="close" | | | class="close" | 3ms <ref name="count"/> | ||
|- | |- | ||
! [http://msdn.microsoft.com/en-us/library/he2s3bh7.aspx LinkedList<T>] | ! [http://msdn.microsoft.com/en-us/library/he2s3bh7.aspx LinkedList<T>] | ||
| | | 15ms / 5ms | ||
| | | 60.987ms | ||
| | | 83.695ms | ||
| | | 53.370ms | ||
| 0ms | | 0ms <ref name="clear"/> | ||
| class="close" | | | class="close" | 3ms <ref name="count"/> | ||
|- | |- | ||
! [http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx List<T>] | ! [http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx List<T>] | ||
| 2ms | | 2ms / 2ms | ||
| | | 42.624ms | ||
| | | 3ms | ||
| | | 52.683ms | ||
| 0ms | | 0ms <ref name="clear"/> | ||
| class="close" | | | class="close" | 3ms <ref name="count"/> | ||
|- | |- | ||
! [http://msdn.microsoft.com/en-us/library/7977ey2c.aspx Queue<T>] | ! [http://msdn.microsoft.com/en-us/library/7977ey2c.aspx Queue<T>] | ||
| | | 6ms / 1ms | ||
| 1ms<ref name="removefirst" | | 1ms <ref name="removefirst"/> | ||
| | | 80.020ms | ||
| | | 183.873ms | ||
| 0ms< | | 0ms <ref name="clear"/> | ||
| class="close" | | | class="close" | 137.493ms <ref name="countenumerate"/> | ||
|- | |- | ||
! [http://msdn.microsoft.com/en-us/library/3278tedw.aspx Stack<T>] | ! [http://msdn.microsoft.com/en-us/library/3278tedw.aspx Stack<T>] | ||
| | | 2ms | ||
| 1ms<ref name="removefirst" / | | 1ms<ref name="removefirst" /> | ||
| | | 75.154ms | ||
| | | 167.390ms | ||
| 0ms< | | 0ms <ref name="clear"/> | ||
| class="close" | | | class="close" | 128.508ms <ref name="countenumerate"/> | ||
|- | |- | ||
! [http://msdn.microsoft.com/en-us/library/ms668265.aspx SynchronizedCollection<T>] | ! [http://msdn.microsoft.com/en-us/library/ms668265.aspx SynchronizedCollection<T>] | ||
| 8ms | | 9ms / 8ms | ||
| | | 60.109ms | ||
| 9ms | | 9ms | ||
| | | 62.040ms | ||
| 0ms< | | 0ms <ref name="clear"/> | ||
| class="close" | | | class="close" | 9ms <ref name="count"/> | ||
|} | |} | ||
Zeile 527: | Zeile 529: | ||
| class="blank" | | | class="blank" | | ||
! colspan="5" | Laufzeiten | ! colspan="5" | Laufzeiten | ||
|- | |- | ||
| class="blank" | | | class="blank" | | ||
Zeile 537: | Zeile 539: | ||
|- | |- | ||
! [http://msdn.microsoft.com/en-us/library/xfhwa508.aspx Dictionary<TKey, TValue>] | ! [http://msdn.microsoft.com/en-us/library/xfhwa508.aspx Dictionary<TKey, TValue>] | ||
| | | 19ms / 13ms | ||
| | | 13ms | ||
| | | 14ms | ||
| | | 0ms <ref name="clear"/> | ||
| class="close" | | | class="close" | 1ms <ref name="count"/> | ||
|- | |- | ||
! [http://msdn.microsoft.com/en-us/library/f7fta44c.aspx SortedDictionary<TKey, TValue>] | ! [http://msdn.microsoft.com/en-us/library/f7fta44c.aspx SortedDictionary<TKey, TValue>] | ||
| | | 155ms / 150ms | ||
| | | 162ms | ||
| | | 139ms | ||
| | | 0ms <ref name="clear"/> | ||
| class="close" | | | class="close" | 1ms <ref name="count"/> | ||
|- | |- | ||
! [http://msdn.microsoft.com/en-us/library/system.collections.hashtable.aspx Hashtable] | ! [http://msdn.microsoft.com/en-us/library/system.collections.hashtable.aspx Hashtable] | ||
| | | 25ms | ||
| | | 14ms | ||
| | | 13ms | ||
| | | 0ms <ref name="clear"/> | ||
| class="close" | | | class="close" | 0ms <ref name="count"/> | ||
|- | |- | ||
! [http://msdn.microsoft.com/en-us/library/ms132319.aspx SortedList<TKey, TValue>] | ! [http://msdn.microsoft.com/en-us/library/ms132319.aspx SortedList<TKey, TValue>] | ||
| | | 8.891ms | ||
| | | 9.025ms | ||
| | | 117ms | ||
| | | 0ms <ref name="clear"/> | ||
| class="close" | | | class="close" | 1ms <ref name="count"/> | ||
|} | |} | ||
Zeile 572: | Zeile 574: | ||
[[Category:CSharp]] [[Kategorie:Code-Beispiele]] | [[Category:CSharp]] [[Kategorie:Code-Beispiele]] | ||
[[Kategorie:Begriffe]] |
Aktuelle Version vom 21. Oktober 2020, 13:23 Uhr
Hinweise
- Falls nicht anders angegeben sind Laufzeiten immer Average Case.
- Alle Links zu den Datenstrukturen zeigen auf die englische Version der MSDN. Diese ist typischerweise vollständiger und genauer als ihre deutsche Übersetzung.
- Die meisten der hier vorgestellten Datenstrukturen (alle außer Hashtable) sind Generics. Ihre Verwendung wird im Generic-Artikel erklärt.
- n entspricht immer dem Count der Datenstruktur, d.h. der Anzahl an Elementen in der Struktur.
- Mit Element-Typ wird hier der Wert bezeichnet, den der Enumerator bei einer Foreach-Anweisung zurückgibt.
- ElementAt ist eine spezielle Extension Method. Bei Strukturen die das Interface IList<T> implementieren gibt sie das Element an der angegebenen Position an, ansonsten iteriert sie so oft wie angegeben und gibt das Element an dieser Stelle zurück. [1]
- Datenstrukturen die auf Arrays basieren besitzen intern eine Capacity. Diese gibt die aktuelle Größe des internen Arrays an. Capacity ist immer größer bzw. gleich Count. Sollte beim Hinzufügen eines Elements die Capacity der Struktur überschritten werden, muss diese wachsen. Dazu erzeugt sie intern einen neuen, größeren Array und kopiert alle bis dahin vorhandenen Einträge in diesen neuen Array. Typischerweise ist die neue Größe des Arrays die erste Primzahl, die größer als das Doppelte der alten Capacity ist.
Laufzeiten und Eigenschaften (nach MSDN)
ein-elementige Datenstrukturen
Laufzeiten | |||||||||
---|---|---|---|---|---|---|---|---|---|
Add | Remove | ElementAt | Contains | Clear | Count | Element-Typ | Thread-safe | Bemerkungen | |
HashSet<T> | O(1) O(n)[2] |
O(1) | O(n) | O(1) | O(n) | O(1) | T | Nein | keine Duplikate |
LinkedList<T> | O(1) | O(1) | O(n) | O(n) | O(n) | O(1) | T | Nein | |
List<T> | O(1) O(n)[2] |
O(n) | O(1) | O(n) | O(n) | O(1) | T | Nein | |
Queue<T> | O(1) O(n)[2] |
O(1) |
O(n) |
O(n) |
O(n) |
O(1) |
T |
Nein |
Remove und Add sind Deqeue und Enqueue
|
Stack<T> | O(1) O(n)[2] |
O(1) |
O(n) |
O(n) |
O(n) |
O(1) |
T |
Nein |
Remove und Add sind Pop und Push |
SynchronizedCollection<T> | O(1) O(n)[2] |
O(n) |
O(1) |
O(n) |
O(n) |
O(1) |
T |
Ja |
benutzt intern List<T>, hat aber zusätzliche Mechanismen um Thread-safety zu garantieren |
zwei-elementige Datenstrukturen
Alle Datenstrukturen in dieser Liste haben folgendes gemeinsam:
- Keys müssen eindeutig sein.
- Keys dürfen nicht von "außen" verändert werden (immutable).
- Die Add-Methode wirft eine Exception wenn der Key bereits vorhanden ist.
- Die Values können über die Item-Property der Datenstruktur angesprochen werden:Dabei wird ein Wert
myDataStructure[key] = expression;
- wenn der Key bereits vorhanden ist überschrieben
- wenn der Key noch nicht vorhanden ist neu angelegt.
- Sie implementieren das IDictionary-Interface.
- Die Laufzeit für ElementAt ist für alle außer Hashtable O(n). Hashtable unterstützt diese Methode nicht.
Außerdem sortieren sowohl SortedDictionary<TKey,TValue> als auch SortedList<TKey,TValue> ihren Inhalt beim einfügen, d.h. wenn man mit einer foreach-Anweisung (o.ä.) über sie iteriert, erhält man die Elemente geordnet zurück. Dabei wird die Ordnung durch den beim Erzeugen angegebenen Comparer bestimmt. Wird kein spezieller Comparer angegeben, verwenden sie einen Standard-Comparer für TKey, der das Interface IComparer<T> erfüllt.
Laufzeiten | ||||||||
---|---|---|---|---|---|---|---|---|
Add | Remove | ContainsKey | Clear | Count | Element-Typ | Thread-safe | Bemerkungen | |
Dictionary<TKey, TValue> | O(1) O(n)[2] |
O(1) | O(1) | O(n) | O(1) | KeyValuePair<TKey,TValue> | Nein | Verfügt über TryGetValue-Methode |
SortedDictionary<TKey, TValue> | O(log n) | O(log n) | O(log n) | O(n) | O(1) | KeyValuePair<TKey,TValue> | Nein | Verfügt über TryGetValue-Methode schneller als SortedList bei unsortierten Daten |
Hashtable | O(1) O(n)[2] |
O(1) | O(1) | O(n) | O(1) | KeyValuePair<object,object> oder DictionaryEntry |
Read-Only mit einem schreibenden Thread | Die initiale Capacity der Hashtable kann im Konstruktor angegeben werden: Hashtable(Int32) |
SortedList<TKey, TValue> | O(n) | O(n) | O(log n) | O(n) | O(1) | KeyValuePair<TKey,TValue> | Nein | Verfügt über TryGetValue-Methode schneller als SortedDictionary bei vorsortierten Daten |
Laufzeiten nach eigenen Tests in ms
Alle Eigenschaften und Bemerkungen aus der vorherigen Sektion gelten auch hier.
Das ursprüngliche Logfile kann hier eingesehen werden.
Die Messungen wurden mit folgenden Parametern durchgeführt:
- erste Messung: Elemente vom Typ Int32
- Alle Messungen wurden mit System.Diagnostics.Stopwatch durchgeführt.
- Es wurden 100.000 zufällige und disjunkte Werte erzeugt (zwischen 0 und Int32.Max) und in einem Array gespeichert.
- Diese Werte wurden für die Messungen Add (mit foreach), Remove (mit for), ElementAt (mit for) und Contains (mit for) aus diesem Array extrahiert.
- zweite Messung: Elemente vom Typ Testobject (Objekt das ein Attribut value (Int32) besitzt und dieses für Vergleiche und Hashcode benutzt)
- Alle Messungen wurden mit System.Diagnostics.Stopwatch durchgeführt.
- Es wurden 100.000 zufällige und disjunkte Objekte erzeugt (mit value zwischen 0 und Int32.Max) und in einem Array gespeichert.
- Diese Objekte wurden für die Messungen Add (mit foreach), Remove (mit for), ElementAt (mit for) und Contains (mit for) aus diesem Array extrahiert.
Int32 (value-type)
ein-elementige Datenstrukturen
Laufzeiten
| ||||||
---|---|---|---|---|---|---|
Add | Remove | ElementAt | Contains | Clear | Count | |
HashSet<T> | 10ms / 3ms | 4ms | 47.672ms | 5ms | 0ms [3] | 2ms [4] |
LinkedList<T> | 7ms / 4ms | 28.681ms | 63.373ms | 28.655ms | 0ms [3] | 2ms [4] |
List<T> | 2ms / 1ms | 5.829ms | 2ms | 30.745ms | 0ms [3] | 2ms [4] |
Queue<T> | 2ms / 1ms | 1ms[5] |
75.194ms |
123.220ms |
0ms [3] | 12ms [6] |
Stack<T> | 1ms | 1ms[5] |
48.820ms | 95.852ms | 0ms [3] | 10ms[6] |
SynchronizedCollection<T> | 8ms / 7ms | 96.966ms | 9ms | 29.295ms | 0ms [3] | 8ms [4] |
zwei-elementige Datenstrukturen
Laufzeiten | |||||
---|---|---|---|---|---|
Add | Remove | ContainsKey | Clear | Count | |
Dictionary<TKey, TValue> | 8ms / 4ms | 3ms | 4ms | 0ms [3] | 0ms [4] |
SortedDictionary<TKey, TValue> | 50ms | 59ms | 30ms | 0ms [3] | 0ms [4] |
Hashtable | 24ms / 10ms | 9ms | 8ms | 0ms [3] | 0ms [4] |
SortedList<TKey, TValue> | 3.190ms | 3.147ms | 20ms | 0ms [3] | 0ms [4] |
Testobject (reference-Typ)
ein-elementige Datenstrukturen
Laufzeiten
| ||||||
---|---|---|---|---|---|---|
Add | Remove | ElementAt | Contains | Clear | Count | |
HashSet<T> | 19ms / 13ms | 13ms | 76.329ms | 14ms | 0ms [3] | 3ms [4] |
LinkedList<T> | 15ms / 5ms | 60.987ms | 83.695ms | 53.370ms | 0ms [3] | 3ms [4] |
List<T> | 2ms / 2ms | 42.624ms | 3ms | 52.683ms | 0ms [3] | 3ms [4] |
Queue<T> | 6ms / 1ms | 1ms [5] | 80.020ms | 183.873ms | 0ms [3] | 137.493ms [6] |
Stack<T> | 2ms | 1ms[5] | 75.154ms | 167.390ms | 0ms [3] | 128.508ms [6] |
SynchronizedCollection<T> | 9ms / 8ms | 60.109ms | 9ms | 62.040ms | 0ms [3] | 9ms [4] |
zwei-elementige Datenstrukturen
Laufzeiten | |||||
---|---|---|---|---|---|
Add | Remove | ContainsKey | Clear | Count | |
Dictionary<TKey, TValue> | 19ms / 13ms | 13ms | 14ms | 0ms [3] | 1ms [4] |
SortedDictionary<TKey, TValue> | 155ms / 150ms | 162ms | 139ms | 0ms [3] | 1ms [4] |
Hashtable | 25ms | 14ms | 13ms | 0ms [3] | 0ms [4] |
SortedList<TKey, TValue> | 8.891ms | 9.025ms | 117ms | 0ms [3] | 1ms [4] |
Referenzen
- ↑ Enumerable.ElementAt<TSource> Method
- ↑ 2,0 2,1 2,2 2,3 2,4 2,5 2,6 Wenn Count + 1 > Capacity.
- ↑ 3,00 3,01 3,02 3,03 3,04 3,05 3,06 3,07 3,08 3,09 3,10 3,11 3,12 3,13 3,14 3,15 3,16 3,17 3,18 3,19 Clear scheint in den aktuellen Tests immer 0ms zu brauchen, die Ursache könnte bei falschen Tests oder dem Garbage Collector liegen.
- ↑ 4,00 4,01 4,02 4,03 4,04 4,05 4,06 4,07 4,08 4,09 4,10 4,11 4,12 4,13 4,14 4,15 Die hier angegebene Zeit ist irrelevant, da der Test hier nur das Zuweisen eines Property-Werts an eine Variable misst.
- ↑ 5,0 5,1 5,2 5,3 Diese Datenstruktur unterstützt nur das Entfernen des ersten Elements, d.h. in diesem Test wurde n-mal das erste Element entfernt.
- ↑ 6,0 6,1 6,2 6,3 Der hier angegebene Wert bezieht sich auf die Extension-Methode Count(), die von Enumerate bereitgestellt wird.