就搜索速度而言,搜索字典的键或列表的值是否更好?
换句话说,哪一个是最优选的?
Dictionary<tring,string> dic = new Dictionary<string,string>();
if(dic.ContainsKey("needle")){ ... }
或者
List<string> list = new List<string>();
if(list.Contains("needle")){ ... }
答案 0 :(得分:8)
如果“更好”意味着“更快”,那么使用字典。字典键按哈希码进行组织,因此查找列表搜索的速度明显快于列表搜索中的多个项目。
使用良好的散列算法,字典搜索可以接近O(1),这意味着搜索时间与字典的大小无关。另一方面,列表是O(n),意味着时间(平均)与列表的大小成比例。
如果您只拥有关键项(不将值映射到值),您也可以尝试HashSet
。它具有O(1)查找的好处,而没有字典的Value
侧的开销。
(当然,开销可能很小,但如果你不需要它,为什么要这样做?)
答案 1 :(得分:4)
对于查找,字典通常是最好的,因为它所花费的时间保持不变。使用列表会增加列表获得的值。
答案 2 :(得分:2)
我建议在查找次数大大超过插入次数时使用Dictionary
。当你总是少于四个项目时,可以使用List
。
对于查找,Dictionary通常是更好的选择。所需时间是平坦的,O(1)恒定的时间复杂度。列表具有O(N)线性时间复杂度。三个元素可以比在字典中查找的更快地循环。