SortedListとSortedDictionary
あまりSortedDictionaryはあまり使ったことがないのですが、
何が違うんだろうとちょっと疑問に思ったので調べてみた。
SortedList コレクション型と SortedDictionary コレクション型
上のリンクの下のほうにある表にある「取得は O(log n) です。」の意味がよくわからなかった(後で調べた - ランダウの記号 - Wikipedia)。
下のリンクのこれまた下のほうにSortedDictionaryクラスの特徴が簡潔にまとめられていたので
それをみてSortedListのほうが速く取り出せるということがわかった。
で、一応自分でも試してみた。
はじめはSortedListの例。100万回追加してみる。
using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { var listWatch = new Stopwatch(); var list = new SortedList<int, string>(); listWatch.Start(); for (int i = 0; i < 1000000; i++) { list.Add(i, i.ToString()); } listWatch.Stop(); Console.WriteLine(listWatch.Elapsed.ToString()); Console.ReadKey(); } } }
結果は00:00:00.5657404。
次はSortedDictionary。
using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { var sortedDictionary = new SortedDictionary<int, string>(); var sortedDictionaryWatch = new Stopwatch(); sortedDictionaryWatch.Start(); for (int i = 0; i < 1000000; i++) { sortedDictionary.Add(i, i.ToString()); } sortedDictionaryWatch.Stop(); Console.WriteLine(sortedDictionaryWatch.Elapsed.ToString()); Console.ReadKey(); } } }
結果は00:00:01.6936629。
随分差が出るなぁ。