背景
最近阅读《代码大全》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);
}
写下这段代码之后,并没有急着运行,而是陷入了思考,思考count
和count1
这两个值会如何发生变化,以及,最终的值是多少。
对于count
来说,先刨除内层循环,对于外层循环来说,一眼便能看出,会循环5次,最终结果是5。而此时,将外层循环第一次执行的时候,内层循环会如何执行呢?显然,外层每执行一次,内层便需执行100次,那对于count
的值来说,最终会是505
而对于count1
来说,外层执行100次,这个是确定的,而此时又来进行思考,外层每执行一次,内层需要多少呢?很明显,5次,那此时,内层总计需要执行100 * 5 = 500次,此时,对于count1
的值,猜测最终值会是100 + 500 = 600
结论
最终执行结果
结语
其实,这只是一段很简单的代码,并没有任何难度,难的是,引起思考。平时工作,拿到需求二话不说开始干,因为缺乏思考,导致很多东西不够完善,总要改改再改改,中间出现很多问题,其实如果在做之前,多想下,思考下,也许会做得更好。到这里,便想到我上家公司领导,也是我师父,在做需求之前,会翻来覆去,看文档、看ue,积极思考,发现其中问题,去找产品讨论,思考各种问题也很全面,公司领导同事都很尊敬他,也很有威望。希望自己以后,也能慢慢地,成为他这样的人