我的个人编程思想——什么时候才能有速度可比性?

我缺乏团队经验,这次就有机会参与到团里。

和同事讨论到一个话题,就是“for(int i=0; i<len; i++)”遍历方式,而我不喜这种用法,就用了“for(obj in list)”的方式。同事一看,说我的方式会比他的方式要慢,不赞同我的用法。

当时我没有反驳,因为我没想过这个问题,慢么?

现在想回来,它不慢,就好比C++与Java比,一定有绝大多数人会说,C++肯定比java快。

我还是那样说,java不比C++慢。

为什么会这么认定?理由是,假定用C++处理的东西需要1小时完成,而java处理同样东西时需要3小时。

是的,这样介定起来,的确java比c++慢。不过!!!再假定一下,用C++处理的东西需要2小时完成,那么很明显,java就需要6小时。

以此类推,c++处理时间每加1小时,java就需要加3小时。

对我而言,不管c++加的量是多少,而java增加量的速度是不变的,这里要理解清楚什么叫增加的速度?

例如这里有一个方程为a^2=b,从这里来看,每增加1,那么b增加多少,就得看每次增加1的a是多少,才能确定具体这次a增加1,b会增加少。

有可能会达当a增加1时,b就会增加几亿,几十亿等天文数字。所谓增加的速度,在学术上名为时间复杂度,同样如果考虑在空间上面,就会有空间复杂度。

那么回到c++与java的对比,他们之间的增长速度是对等的,都是同一个时间复杂度。

这时候反而使用java要比c++更多时候会有更多方面的优越性了,例如跨平台,垃垃回收等。

什么是速度,对我而言,它是属于那种级别的速度,例如有最简的有n,logn和n*logn。

二分查找,就是对于预排后的查找,例如数据库的索引就是二分查找索引,快速找到资源。logn是一种随着n的增大,logn的增加速度就会不断接近于0,接近于0跟等于0有区别么?

是的,可以说没区别,像这样的二分查找,就等于说不需要时间去做。

换名话说,logn就等于1,而n*logn就等于n。

回到“for(int i=0; i<len; i++)”与“for(obj in list)”方式,当有人再提起他们的速度谁快时,就可以直接问他,你会用c++还是用java,里面的道理同等。

时间: 2024-08-11 10:39:23

我的个人编程思想——什么时候才能有速度可比性?的相关文章

异常笔记--java编程思想

开一个新的系列,主要记一些琐碎的重要的知识点,把书读薄才是目的...特点: 代码少,概念多... 1. 基本概念 异常是在当前环境下无法获得必要的信息来解决这个问题,所以就需要从当前环境跳出,就是抛出异常.抛出异常后发生的几件事: 1.在堆上创建异常对象. 2.当前的执行路径中止                                          3. 当前环境抛出异常对象的引用.                                         4. 异常处理机制接

《Java编程思想》第十三章 字符串

<Java编程思想>读书笔记 1.String作为方法的参数时,会复制一份引用,而该引用所指的对象其实一直待在单一的物理位置,从未动过. 2.显式地创建StringBuilder允许预先为他指定大小.如果知道字符串多长,可以预先指定StringBuilder的大小避免多次重新分配的冲突. 1 /** 2 * @author zlz099: 3 * @version 创建时间:2017年9月1日 下午4:03:59 4 */ 5 public class UsingStringBuilder {

JAVA编程思想导论(猜字谜游戏1.0)

一. 引言 本章将借用一个简易的猜字谜游戏,向读者简单介绍JAVA面向对象的部分知识以及实现思路. 二. 面向对象思想导论 为了了解什么是面向对象,我们需要解决以下几点问题(如图2.1所示): 面向对象是什么? 面向对象的特征(或者说表现形式). 为什么要面向对象(它与面向过程的区别). 面向对象该怎么做? 众所周知,计算机的编程语言是始于对机器的模仿,即以代码的形式控制机器完成人们希望所能达到的任务或者效果,故而所有编程语言都提供了抽象机制. 而这种抽象机制实际上可以这么认为——人们所能够解决

大道至简—实践工程者的编程思想

大道至简—实践工程者的编程思想 提到编程,很多人都会发怵,是一门高难度的工作,当然我也不例外,这可以说是没有清楚地认知编程其中包含的思想,还没有真正地入门.程序是什么?是要写的一大堆复杂的代码?是熬夜通宵也弄不出来的东西?其实,就我而言,我认为程序的根本在于思想,只有想明白了才能写出来,想不明白自然就写不出来,正如<大道至简>这本书所写的,要把东西简化,这样使人才能一目了然. 愚公移山都不陌生,其实从这中间可以提炼出有关项目的实际执行,这其中有原始的需求:“惩山北之塞,出入之迂也”: 项目沟通

编程思想之多线程与多进程(2)——线程优先级与线程安全

原文:http://blog.csdn.net/luoweifu/article/details/46701167 作者:luoweifu 转载请标名出处 <编程思想之多线程与多进程(1)--以操作系统的角度述说线程与进程>一文详细讲述了线程.进程的关系及在操作系统中的表现,这是多线程学习必须了解的基础.本文将接着讲一下线程优先级和线程安全. 线程优先级 现在主流操作系统(如Windows.Linux.Mac OS X)的任务调度除了具有前面提到的时间片轮转的特点外,还有优先级调度(Prior

如何培养面向对象的编程思想(转)

1.什么是面向对象? 面向对象是专指在程序设计中采用封装,继承,多态和抽象的设计方法.面向对象的程序设计语言必须有描述对象及其相互之间关系的语言成分.这些程序设计语言可分为以下几类:系统中一切事物皆为对象:对象是属性及其操作的封装体:对象可按其性质分类,对象成为类的实例:实例关系和继承关系是对象之间的静态关系:消息传递是对象之间动态联系的唯一方式,也是计算的唯一形式:方法是消息的序列. 2.如何理解面向对象? 从世界观的角度可以认为:面向对象的基本哲学是认为世界是由各种各样具有自己的运动规律和内

编程思想与算法

常用编程思想与算法 本文是在阅读Aditya Bhargava先生算法图解一书所做的总结,文中部分代码引用了原文的代码,在此感谢Aditya Bhargava先生所作出的这么简单的事例,对基础算法感兴趣的朋友可以阅读原文.由于本人也是编程初学者,所以本书比较浅显易懂,所介绍的算法配上插图也十分易懂,这里只是介绍几种最基础的算法由浅入深以帮助理顺一些简单的思维逻辑. 算法简介 算法是一组完成任务的指令.任何代码片段都可视为算法,我们这里讨论的算法要么速度快,要么能解决有趣的问题,要么兼而有之. 二

《java编程思想》有必要买吗

<java编程思想>有必要买吗 1.看到过好多个这样的提问,其实我一般真的不那么容易分享自己的这点心得的,这是第一次回答这样的"推荐书籍"方面的问题. 我买编程方面的书籍,有一个非常清晰.坚决的原则--电子工业出版社的! 对于JAVA,建议你看如下的书: 首先,<21天学通JAVA>: 然后,<30天学通JAVA项目案例开发>(这本书的内容都是实例的,非常棒的实例!适合初学者的同时,又有实际应用性!) 以上的书籍,是基于你只想学J2SE的. 我还建议

《Java编程思想》第一二章

前段时间一直通过网络教程学习Java基础,把面向对象部分学完之后本来打算继续深入学习,但是感觉自己操之过急了,基础根本不够扎实,所以入手了一本<Java编程思想>,希望先把基础打好,再深入学习. 不得不说这本书真的不是浪得虚名,对于我这样的新手看完一二章之后也觉得这本书值得买了.跟网上教程不同,这本书一开始便直接全面深入论述Java面向对象编程中对对象的理解,值得注意的是如果之前没有Java编程的基础,第一章看起来会比较吃力,而且效果也不太好,因为都是理论没有使用代码进行演示说明,所以作者也支