优化for循环代码
数字职场
大多数还未毕业的学生,认为招聘考试只是知识的测试,这是完全错误的。目前,大部分公司在出招聘题目时,都会从实际出发,结合高校的课程。这类题让人看似简单,当细细思考时,会发现有很多扩展点,例如一个简单的for循环,在实际应用中就要进行优化。
招聘题目:请简述以下两个for循环的优缺点。
// 第一个
for (i=0; i { if (condition) DoSomething(); else DoOtherthing(); } // 第二个 if (condition) { for (i=0; i DoSomething(); } else { for (i=0; i DoOtherthing(); } 题目答案:第一个代码没有什么缺点,优点是:N次,每次都要对condition进行判断。第二个代码没有优点,缺点是判断一次condition,就要对something或Otherthing执行N次。 考官出此题的目的,在于测试应聘人员的语言水平以及对编程的扩展性。本题表面上是阅读代码,实际上是对执行效率的判断,这也是对实际工作中代码优化的能力测试。通过此题,考官可以对应聘人员的编程语言水平有个基本了解,更可以判断应聘人员编程的可塑性,以及对代码的优化感觉。 在实际开发过程中,编程所追求的是代码优雅、结构清晰、执行效率高,但是广大在校生都以实现功能为目的进行代码编写与语言学习,这是非常错误的。在各种招聘考试中,对代码优化判断的题目比较多,学生朋友需要有针对性地进行练习。 for循环在实际开发中是如何运用的?是如何优化的呢?我们通过两段代码进行说明。代码要达到的目的是,传入一个待过滤的集合,根据其中每一项的属性,返回一个加工后的集合。对于满足isInNToMQueue条件并且onlyNToM 为true的,数据不做更改,否则为其拼接上一个后缀“:N”。 代码1:protected List List for (String instChannelApi : instChannelApis) { //N:M队列判断 if (isInNToMQueue(instChannelApi) && onlyNToM) { nToMApis.add(instChannelApi); } else { nToMApis.add(instChannelApi + ":N"); } } return nToMApis; } 点评:算法简洁,结构清晰,代码优雅。在执行过程中,循环在外层,分支在内层,是高效率代码的特征。大家可以看到,代码语句非常简单,没有运用太多的算法,而只是对数据结构形式进行定义要求,产生N:M队列。 代码2:protected List List if (onlyNToM) { for (String instChannelApi : instChannelApis) { //N:M队列判断 if (isInNToMQueue(instChannelApi)) { nToMApis.add(instChannelApi); } } } else { for (String instChannelApi : instChannelApis) { //N:M队列判断 if (isInNToMQueue(instChannelApi)) { nToMApis.add(instChannelApi +":N"); } } } return nToMApis; } 点评:语句冗余,结构不清晰。在阅读代码时,不难发现语句的可读性很低,结构非常混乱,这是代码低效率的一大表现。分支语句中,包含循环语句,循环中又包含分支,执行的过程很复杂,这是代码没有优化的表现。目的分析
实际应用