Dictionary和List遍历速度比较
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dictionary和List遍历速度比较相关的知识,希望对你有一定的参考价值。
参考技术A List<T>是T的集合Dictionary<T1, T2>字典,包含Key和Value,通过Key可以快速查找到Value
Dictionary<T1, T2>根据Key通过Hash计算得到应该存放的虚拟内存地址,当按照Key进行查找的时候,首先就是根据Key计算出其存放的虚拟内存地址,找到对应的数据。
List<T>在内存中是连续的
在宏观上Dictionary<T1, T2>的内存地址不是连续的,虽然微软对这个算法进行了很大的优化,但是正因为这种不连续,在遍历的时候,Dictionary会产生大量的内存换页的操作,然而List只需要进行最少的内存换页即可。这就是List和Dictionary在遍历时效率差异的根本原因。
Dictionary的遍历效率很差,不建议进行遍历Dictionary。
Dictionary除了要储存的Value之外,还需要一个Key,造成了内存空间的双倍浪费。
从内存空间来说,List只需要在原有的地址基础上向后延续即可,然而Dictionary需要经过复杂的Hash计算,造成性能上的损耗。
Dictionary的遍历
Dictionary<string, int> list = new Dictionary<string, int>();
list.Add("d", 1);
//3.0以上版本
foreach (var item in list)
{
Console.WriteLine(item.Key + item.Value);
}
//KeyValuePair<T,K>
foreach (KeyValuePair<string, int> kv in list)
{
Console.WriteLine(kv.Key + kv.Value);
}
//通过键的集合取
foreach (string key in list.Keys)
{
Console.WriteLine(key + list[key]);
}
//直接取值
foreach (int val in list.Values)
{
Console.WriteLine(val);
}
//非要采用for的方法也可
List<string> test = new List<string>(list.Keys);
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(test[i] + list[test[i]]);
}
以上是关于Dictionary和List遍历速度比较的主要内容,如果未能解决你的问题,请参考以下文章