前几天看了《Java程序员职场全攻略:从小工到 专家》,其中讲到Java中的链表随机插入并不比数组快,这跟我们教科书上所说的相悖,书中举的例子是Java的。今日闲来无事,我用C++做了个实验,使用的链表是list类,数组用vector类替代,过程如下:
先上代码:
计时使用的是滴答数,先插入1000个元素,结果如下:
插入10000个元素的结果:
可以看出,随着插入元素的增多,list的速度较vector越来越慢,插入10000个元素时差了百倍不止,虽然理论上list的插入速度要比vector快,因为vector要移动元素,list只要变动两个指针,但是这仅仅是从插入这个动作做比较,我们在实际使用时看的是整体效果,定位插入的位置也是需要时间的,而这一步,vector只需要常数时间,而list却需要线性时间,这样一中和,list的插入优势就没了。实际使用中随机插入还是用vector来的快。
其实计算机科学中有许多类似的现象,理论上对的,实际使用时并不一定就好使,例如KMP算法。并不是说实际使用时理论就不对了,而是现实中影响的因素太多,要获得最佳的效果,还得多实践,毕竟程序员做的是类似工程师的工作,永远要以事实说话的。
1310

被折叠的 条评论
为什么被折叠?



