字典查找(O(1))与Linq,其中

字典查找(O(1))与Linq,其中,linq,dictionary,complexity-theory,time-complexity,Linq,Dictionary,Complexity Theory,Time Complexity,什么更快?我应该牺牲Linq标准来实现速度(假设字典查找确实更快)?因此,让我详细说明: 我有以下资料: List<Product> products = GetProductList(); 或者,使用Linq: Product p = products.Where(p => p.serial.Equals(some_serial)).FirstOrDefault(); Dict方法的缺点当然是,这需要更多的内存空间、更多的代码编写、更少的优雅等等(尽管这其中的大部分是有争

什么更快?我应该牺牲Linq标准来实现速度(假设字典查找确实更快)?因此,让我详细说明:

我有以下资料:

List<Product> products = GetProductList();
或者,使用Linq:

Product p = products.Where(p => p.serial.Equals(some_serial)).FirstOrDefault();
Dict方法的缺点当然是,这需要更多的内存空间、更多的代码编写、更少的优雅等等(尽管这其中的大部分是有争议的)。假设这不是一个因素。我应该采取第一种方法吗


最后,我想确认上述Linq方法的复杂性是否确实是O(n),我不认为它能比这更好

假设您从对象枚举开始,并且只执行一次

执行
Where
方法会比添加到
字典
然后再进行查找更快。原因是dictionary方法不是O(1)。在这个场景中,您将向字典中添加项,然后进行查找。添加部分是O(N),它与
Where
方法一样昂贵,并且有额外的内存开销


另一个需要注意的小问题是,
字典
并不是真正的O(1)。相反,它接近O(1),但在某些情况下(例如,大量冲突键)性能会降低string some_serial = ...; try { Product p = dict[some_serial]; } catch(KeyNotFoundException) { }
Product p = products.Where(p => p.serial.Equals(some_serial)).FirstOrDefault();