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遍历速度比较的主要内容,如果未能解决你的问题,请参考以下文章

Python中如何以dict的key排序输出?

Python中如何以dict的key排序输出?

Python哈希表的例子:dictset

迭代时修改list和dictionary,为啥在dict上会失败?

Dictionary vs List 效率

Python中dict的特点更新dict遍历dict