一個數據庫表(id,name,…)中有10萬條記錄,查找name=’guoguo‘可能需要很長時間,但是如果對name建立了索引,那麼再用name=’guoguo‘來查詢將變得非常快(有多快?自己可以去試試)。
相應的,有時候我們的代碼裡面會用到List<T>,Array來存儲一組數據。我們以一個例子來說明一下。
定義數據類型:
ID { ; Name { ; Age { ;
。從List中按照name找到對應的UserInfo可以用以下代碼:
List<UserInfo> UserInfo GetUserInfoByName( ( i = ; i < _userinfos.Count; i++= (ui.Name == UserInfo GetUserInfoByName_Find( _userinfos.Find((temp) => temp.Name ==
兩個方法其實都是使用遍歷列表的方式去比較、查找;我做了實驗,如果列表中有10萬條記錄,分別執行“查找第5萬個元素”1000遍的耗時為:
GetUserInfoByName
1877毫秒
GetUserInfoByName_Find
2290毫秒
也就是說平均一次要2毫秒左右(Find效率還更低);
OK,接下來我們要試著借鑒數據庫的方式給List建立索引。
List<UserInfo> { =<, UserInfo> <, UserInfo> userIndex = Dictionary<, UserInfo> ( item =
MakeIndex方法在Userinfos的set屬性器裡面調用;那麼查詢的方法就應該這麼寫:
UserInfo GetUserInfoByNameEx(
這麼簡單?對,就是這麼簡單,而且,效率特別高。與上面的兩個方法一起進行比較:
建立索引+查找10萬次=36毫秒!
原因就是Dictionary[Key]方法的時間復雜度為O(1),幾乎不耗時。
以下是示例的所有代碼:
示例代碼