嵌套循环or小表驱动大表 一点思考

背景

最近阅读《代码大全》29章-代码调试技术-循环,这一章节,提到一些关于循环的优化,有案例涉及到嵌套循环的循环次数问题,建议将次数少的循环放到外层,次数多的循环放到内层,便突然想到以前在极客时间上数据库专家丁奇的专栏《Mysql实战45讲》中关于join表,当中提到的建议使用小表驱动大表

思考

读mysql时,可能真的没有深入思考过,也没有去尝试,没有明白其中含义,于是便想着尝试下为什么会提出这种论点,于是便写下如下代码

public static void main(String[] args) {  
    int count = 0;  
    for (int i = 0; i < 5; i++) {  
        count++;  
        for (int j = 0; j < 100; j++) {  
            count++;  
        }  
    }  
    System.out.println(count);  
  
    int count1 = 0;  
    for (int i = 0; i < 100; i++) {  
        count1++;  
        for (int j = 0; j < 5; j++) {  
            count1++;  
        }  
    }  
    System.out.println(count1);  
}

写下这段代码之后,并没有急着运行,而是陷入了思考,思考countcount1这两个值会如何发生变化,以及,最终的值是多少。

对于count来说,先刨除内层循环,对于外层循环来说,一眼便能看出,会循环5次,最终结果是5。而此时,将外层循环第一次执行的时候,内层循环会如何执行呢?显然,外层每执行一次,内层便需执行100次,那对于count的值来说,最终会是505

而对于count1来说,外层执行100次,这个是确定的,而此时又来进行思考,外层每执行一次,内层需要多少呢?很明显,5次,那此时,内层总计需要执行100 * 5 = 500次,此时,对于count1的值,猜测最终值会是100 + 500 = 600

结论

最终执行结果
image.png

结语

其实,这只是一段很简单的代码,并没有任何难度,难的是,引起思考。平时工作,拿到需求二话不说开始干,因为缺乏思考,导致很多东西不够完善,总要改改再改改,中间出现很多问题,其实如果在做之前,多想下,思考下,也许会做得更好。到这里,便想到我上家公司领导,也是我师父,在做需求之前,会翻来覆去,看文档、看ue,积极思考,发现其中问题,去找产品讨论,思考各种问题也很全面,公司领导同事都很尊敬他,也很有威望。希望自己以后,也能慢慢地,成为他这样的人

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值