当前位置:  开发笔记 > 编程语言 > 正文

List.BinarySearch vs Dictionary.TryGetValue - 更快

如何解决《List.BinarySearchvsDictionary.TryGetValue-更快》经验,为你挑选了1个好方法。

说500个元素会更快.

或者检索元素的数据结构/集合是什么?

        List myObjs = new List();
        int i = myObjs.BinarySearch(myObjsToFind);
        MyObj obj = myObjs[i];

要么

        Dictionary myObjss = new Dictionary();
        MyObj value;
        myObjss.TryGetValue(myObjsToFind, out value);

Jon Skeet.. 9

我假设在您的真实代码中,您实际上填充了 myObjs - 并对其进行排序.

你刚试过吗?这取决于几个因素:

您是否因任何其他原因需要对列表进行排序?

MyObj.CompareTo(MyObj)的速度有多快?

MyObj.GetHashCode()的速度有多快?

MyObj.Equals()的速度有多快?

你有多大可能得到哈希冲突?

它真的对你有重大影响吗?

在二进制搜索案例中,对单个调用GetHashCode和在字典情况下对Equals进行一些调用(取决于散列冲突),需要进行大约8或9次比较.然后是两种情况下涉及的内在计算(访问数组等).

这真的是你的瓶颈吗?

我预计词典是快一点,在500点的元素,但不是快得多.随着收集的增长,差异将明显增加.



1> Jon Skeet..:

我假设在您的真实代码中,您实际上填充了 myObjs - 并对其进行排序.

你刚试过吗?这取决于几个因素:

您是否因任何其他原因需要对列表进行排序?

MyObj.CompareTo(MyObj)的速度有多快?

MyObj.GetHashCode()的速度有多快?

MyObj.Equals()的速度有多快?

你有多大可能得到哈希冲突?

它真的对你有重大影响吗?

在二进制搜索案例中,对单个调用GetHashCode和在字典情况下对Equals进行一些调用(取决于散列冲突),需要进行大约8或9次比较.然后是两种情况下涉及的内在计算(访问数组等).

这真的是你的瓶颈吗?

我预计词典是快一点,在500点的元素,但不是快得多.随着收集的增长,差异将明显增加.

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有