zoukankan      html  css  js  c++  java
  • 网友谈:Dictionary.ContainsKey和List.BinarySearch哪个效率高

    有一个静态的列表,需要频繁地判断一个字符串是否在该列表中。这样的情况用dictionary还是用list来保存这个列表比较合适。


    回复:Dictionary.ContainsKey和List.BinarySearch哪个效率高

    使用dictionary就行了,方便!

    回复:Dictionary.ContainsKey和List.BinarySearch哪个效率高

    dictionary好像比hashtable还要快(原理差不多),但是创建的时候应该比List慢

    回复:Dictionary.ContainsKey和List.BinarySearch哪个效率高

    Dictionary.ContainsKey查找时好像也是用二分查找实现的

    回复:Dictionary.ContainsKey和List.BinarySearch哪个效率高

    1.
    当然选择 Dictionary

    2.
    完全可以按最基本的数据结构知识来判断

    3.
    Dictionary<TKey, TValue> 是 Hashtable 的泛型版本,
    List<T> 是 ArrayList 的泛型版本,

    4.
    前者基于散列算法,或者内部实际上使用数组(列表)存储,

    那么你可以选择了

    如果需要非常快地添加、删除和查找项目,而且不关心集合中项目的顺序,那么首先应该考虑使用 System.Collections.Generic.Dictionary<TKey, TValue>(或者您正在使用 .NET Framework 1.x,可以考虑 Hashtable)。三个基本操作(添加、删除和包含)都可快速操作,即使集合包含上百万的项目。另一方面,利用 List<T>(或 .NET Framework 1.x 中的 ArrayList)插入和删除项目所需的时间都可能有所不同。(List<T> 和 ArrayList 都在基础数组中存储项目,并保持顺序。添加项目可能需要移动基础数组中现有的项目以腾出空间。在末尾添加项目不需要进行任何移动,而且速度非常快)。

    如果您的使用模式很少需要删除和大量添加,而重要的是保持集合的顺序,那么您仍然可以选择 List<T>。虽然查找速度可能比较慢(因为在搜索目标项目时需要遍历基础数组),但可以保证集合会保持特定的顺序。另外,您可以选择 Queue<T> 实现先进先出 (FIFO) 顺序或 Stack<T> 实现后进先出 (LIFO) 顺序。虽然 Queue<T> 和 Stack<T> 都支持枚举集合中的所有项目,但前者只支持在末尾插入和从开头删除,而后者只支持从开头插入和删除。

    如果需要在实现快速插入的同时保持顺序,那么使用新的 LinkedList<T> 集合可帮助您提高性能。与 List<T> 不同,LinkedList<T> 是作为动态分配的对象链实现。与 List<T> 相比,在集合中间插入对象只需要更新两个连接和添加新项目。从性能的角度来看,链接列表的缺点是垃圾收集器会增加其活动,因为它必须遍历整个列表以确保没有对象没有被释放。另外,由于每个节点相关的开销以及每个节点在内存中的位置等原因,大的链接列表可能会出现性能问题。虽然将项目插入到 LinkedList<T> 的实际操作比在 List<T> 中插入要快得多,但是找到要插入新值的特定位置仍需遍历列表并找到正确的位置。

    如前所述,Dictionary<TKey, TValue> 可能最适用于快速插入和查找项目。但是,较快的查找速度只是针对普通情况而言,某些数据集可能导致性能急剧下降。SortedDictionary<TKey,TValue> 是一个不同的实现,它用平衡树实现作为基础数据存储;这相对提高了查找速度并保持项目的排列顺序,但插入很有可能会慢一些(随集合中的项目数量不同而有所差异)。或者也可以用 SortedList<Tkey,TValue>,它使用两个独立的数组分别保存键和值,并保持两者的顺序(最坏的情况是必须移动所有键和值)。

    http://msdn.microsoft.com/msdnmag/issues/07/08/CLRInsideOut/default.aspx?loc=zh

    5。
    Dictionary.ContainsKey查找时好像也是用二分查找实现的
    =======
    得补数据结构去了

    回复:Dictionary.ContainsKey和List.BinarySearch哪个效率高

    既然Dictionary.ContainsKey也是用二分查找实现的,那为什么它比List快?

    回复:Dictionary.ContainsKey和List.BinarySearch哪个效率高

    既然Dictionary.ContainsKey也是用二分查找实现的,那为什么它比List快?

    =========

    不是 BinarySearch ,内部使用散列/哈希算法存储

    List 得先排序,才能用 BinarySearch

    回复:Dictionary.ContainsKey和List.BinarySearch哪个效率高

    mark.

    回复:Dictionary.ContainsKey和List.BinarySearch哪个效率高

    又长见识了

    回复:Dictionary.ContainsKey和List.BinarySearch哪个效率高

    学习了
  • 相关阅读:
    第三周学习进度条
    软件工程个人作业02
    构建之法阅读笔记02
    学习进度条
    构建之法阅读笔记01
    软件工程个人作业01
    构建之法粗读
    第一次作业
    动手动脑接口与继承
    大道至简第七章第八章
  • 原文地址:https://www.cnblogs.com/winnxm/p/919721.html
Copyright © 2011-2022 走看看