Dictionary, List or Array?
我正在写一个性能至关重要的服务,我不确定什么是最快的。我有一些对象(50-200),每个对象中都有一个ID(ints,例如84397或23845)。拥有一个字典,一个键值对列表,或者一个索引设置为id的列表,其余的值为空,或者一个具有相同想法的数组会更快吗?
- 您试过运行一个简单的测试应用程序吗?
- 我已经开始了,但我认为提问会更有效率(对未来的提问者和我来说)。
- 您必须对这些对象执行哪些操作?按键搜索?搜索值?有很多插页吗?移除钥匙?
- 在使用数组的情况下,最大ID是什么?你会增加多少阵列大小?
- 按键读取值(随机时间),按键更新值(每秒),插入几次(每隔几秒)。最大ID不固定。
- 快点写什么?更快的查找速度?移除?添加?更新?插入?枚举?内存开销较小,其他程序运行更平稳?写得更快?很抱歉投票结束。
这取决于要执行的操作。假设您想要找到一个具有给定ID的对象。
- 大型阵列方法是最快的:访问myArray[84397]是一个固定时间的操作o(1)。当然,这种方法需要的内存最多。
- 由于字典在内部使用哈希表,因此它的速度几乎相同,但需要的内存更少。
- pairs方法是最慢的,因为您可能需要遍历整个列表才能找到条目,这会产生O(n)复杂性。
因此,在您的情况下,我会选择字典,除非在您的案例中,大型数组的性能稍微好一些。
- 感谢您的帮助,我将使用字典(假设稍微意味着要快1毫秒)。
- 你写的"字典需要更少的内存"-你不是说写它需要更多的内存,因为它内部使用哈希表吗?
- @Borntocode:它比前面的选项(大型数组)需要更少的内存。这个巨大的数组需要最大的存储空间,而字典只需要一些恒定数量的元素*存储空间。
Dictionary在内部使用哈希表,所以我认为它是最快的一个。
- +1这正是Dictionary存在的原因。
- 哈希表本身会更好吗?
- @sboss-通用字典在内部不使用HashTable,因此,在使用值类型时,HashTable的速度要慢得多,就像您计划使用int一样。
- Dictionary使用哈希表,但不使用HashTable类。
- @加布-是的。我现在意识到我不清楚。谢谢你的澄清。
- @对于hashtable和dictionary来说,sboss的性能是非常相似的,但是有一个主要的区别:dictionary是通用类型,hashtable不是。这意味着您可以使用字典获得类型安全性,因为您不能在字典中插入任何随机对象,也不必强制转换所取的值。`
- @戴维施瓦茨,你不能完全改变别人的职位。如果你有答案的话,就自己回答。
字典与列表查找时间
此外,要更详细地解释不同的收藏,请查看此问题。
您也可以使用哈希表。字典内部使用它。但字典的一个优点是它是一个通用类型,它给了您类型安全性。
这是不同的线字典与哈希表我希望它能帮助你做出决定。
普拉文