From 5f854897384d539072278c1d5c68b452f10ab3ce Mon Sep 17 00:00:00 2001 From: itwanger Date: Wed, 25 Aug 2021 09:30:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/annotation/annotation.md | 2 +- docs/array/print.md | 2 +- docs/bottom.md | 2 +- docs/collection/big-o.md | 100 ++++++++++++++++++++++++++++ docs/collection/gailan.md | 6 -- docs/control/java-control.md | 2 +- docs/core-grammar/java-naming.md | 2 +- docs/core-points/equals-hashcode.md | 2 +- docs/enum/enum.md | 2 +- docs/exception/shijian.md | 2 +- docs/fanshe/fanshe.md | 2 +- docs/generic/true-generic.md | 2 +- docs/keywords/java-instanceof.md | 2 +- docs/object-class/java-interface.md | 4 +- docs/overview/javadoc.md | 2 +- docs/string/split.md | 2 +- 16 files changed, 115 insertions(+), 21 deletions(-) create mode 100644 docs/collection/big-o.md diff --git a/docs/annotation/annotation.md b/docs/annotation/annotation.md index d8c2d6e85..bd3bc2b7e 100644 --- a/docs/annotation/annotation.md +++ b/docs/annotation/annotation.md @@ -222,6 +222,6 @@ public class JsonFieldTest { ----- -《**教妹学 Java**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! +《**Java 程序员进阶之路**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! 图片没显示的话,可以微信搜索「沉默王二」关注 \ No newline at end of file diff --git a/docs/array/print.md b/docs/array/print.md index 87d918bdb..33902b1a0 100644 --- a/docs/array/print.md +++ b/docs/array/print.md @@ -153,6 +153,6 @@ System.out.println(Arrays.deepToString(deepArray)); ----- -《**教妹学 Java**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! +《**Java 程序员进阶之路**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! 图片没显示的话,可以微信搜索「沉默王二」关注 diff --git a/docs/bottom.md b/docs/bottom.md index 0701d9296..c9e683d82 100644 --- a/docs/bottom.md +++ b/docs/bottom.md @@ -1,5 +1,5 @@ 如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号“**沉默王二**”。 -**《教妹学Java》:** 本文档的离线版 PDF 版可以扫描下方的二维码关注我的[公众号](#公众号)后回复 **" 03"** 关键字即可领取! +**《Java 程序员进阶之路》:** 本文档的离线版 PDF 版可以扫描下方的二维码关注我的[公众号](#公众号)后回复 **" 03"** 关键字即可领取! ![我的公众号](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/itwanger.png) \ No newline at end of file diff --git a/docs/collection/big-o.md b/docs/collection/big-o.md new file mode 100644 index 000000000..2f62c27e7 --- /dev/null +++ b/docs/collection/big-o.md @@ -0,0 +1,100 @@ +## 时间复杂度 + +“二哥,为什么要讲时间复杂度呀?”三妹问。 + +“因为接下来要用到啊。后面我们学习 ArrayList、LinkedList 的时候,会比较两者在增删改查时的执行效率,而时间复杂度是衡量执行效率的一个重要标准。”我说。 + +“到时候跑一下代码,统计一下前后的时间差不更准确吗?”三妹反问道。 + +“实际上,你说的是另外一种评估方法,这种评估方法可以得出非常准确的数值,但也有很大的局限性。”我不急不慢地说。 + +第一,测试结果会受到测试环境的影响。你比如说,同样的代码,在我这台 iMac 上跑出来的时间和在你那台华为的 MacBook 上抛出的时间可能就差别很大。 + +第二,测试结果会受到测试数据的影响。你比如说,一个排序后的数组和一个没有排序后的数组,调用了同一个查询方法,得出来的结果可能会差别特别大。 + +“因此,我们需要这种不依赖于具体测试环境和测试数据就能粗略地估算出执行效率的方法,时间复杂度就是其中的一种,还有一种是空间复杂度。”我继续补充道。 + +来看下面这段代码: + +```java +public static int sum(int n) { + int sum = 0; // 第 1 行 + for (int i=0;i T(n) = O(f(n)) + +f(n) 表示代码总的执行次数,大写 O 表示代码的执行时间 T(n) 和 f(n) 成正比。 + +这也就是大 O 表示法,它不关心代码具体的执行时间是多少,它关心的是代码执行时间的变化趋势,这也就是时间复杂度这个概念的由来。 + +对于上面那段代码 `sum()` 来说,影响时间复杂度的主要是第 2 行代码,其余的,像系数 2、常数 2 都是可以忽略不计的,我们只关心影响最大的那个,所以时间复杂度就表示为 `O(n)`。 + +常见的时间复杂度有这么 3 个: + +1)`O(1)` + +代码的执行时间,和数据规模 n 没有多大关系。 + +括号中的 1 可以是 3,可以是 5,可以 100,我们习惯用 1 来表示,表示这段代码的执行时间是一个常数级别。比如说下面这段代码: + +```java +int i = 0; +int j = 0; +int k = i + j; +``` + +实际上执行了 3 次,但我们也认为这段代码的时间复杂度为 `O(1)`。 + +2)`O(n)` + +时间复杂度和数据规模 n 是线性关系。换句话说,数据规模增大 K 倍,代码执行的时间就大致增加 K 倍。 + +3)`O(logn)` + +时间复杂度和数据规模 n 是对数关系。换句话说,数据规模大幅增加时,代码执行的时间只有少量增加。 + +来看一下代码示例, + +```java +public static void logn(int n) { + int i = 1; + while (i < n) { + i *= 2; + } +} +``` + +换句话说,当数据量 n 从 2 增加到 2^64 时,代码执行的时间只增加 64 倍。 + +``` +遍历次数 | i +----------+------- + 0 | i + 1 | i*2 + 2 | i*4 + ... | ... + ... | ... + k | i*2^k +``` + +“好了,三妹,这节就讲到这吧,理解了上面 3 个时间复杂度,后面我们学习 ArrayList、LinkedList 的时候,两者在增删改查时的执行效率就很容易对比清楚了。”我抬起头看了看三妹说,她似乎有些明白,又有些不太明白。 + +“不要担心哥,我再温习一遍就能搞懂了。”三妹很乖。 + +---------- + + +《**Java 程序员进阶之路**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! + +图片没显示的话,可以微信搜索「沉默王二」关注 \ No newline at end of file diff --git a/docs/collection/gailan.md b/docs/collection/gailan.md index 80a6a88bd..a2f9b1427 100644 --- a/docs/collection/gailan.md +++ b/docs/collection/gailan.md @@ -195,9 +195,3 @@ HashMap 是无序的,所以遍历的时候元素的顺序也是不可测的。 “好的,二哥。”三妹重新回答沙发上,一盘王者荣耀即将开始。 ----------- - - -《**教妹学 Java**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! - -图片没显示的话,可以微信搜索「沉默王二」关注 \ No newline at end of file diff --git a/docs/control/java-control.md b/docs/control/java-control.md index cda1826c1..fc803292b 100644 --- a/docs/control/java-control.md +++ b/docs/control/java-control.md @@ -901,6 +901,6 @@ public class ContinueDoWhileDemo { ----- -《**教妹学 Java**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! +《**Java 程序员进阶之路**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! 图片没显示的话,可以微信搜索「沉默王二」关注 \ No newline at end of file diff --git a/docs/core-grammar/java-naming.md b/docs/core-grammar/java-naming.md index 76cad81b4..c7f155408 100644 --- a/docs/core-grammar/java-naming.md +++ b/docs/core-grammar/java-naming.md @@ -167,6 +167,6 @@ Service/DAO 层的方法命名规约: ----- -《**教妹学 Java**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! +《**Java 程序员进阶之路**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! 图片没显示的话,可以微信搜索「沉默王二」关注 \ No newline at end of file diff --git a/docs/core-points/equals-hashcode.md b/docs/core-points/equals-hashcode.md index e21368cf6..7e8f84d8c 100644 --- a/docs/core-points/equals-hashcode.md +++ b/docs/core-points/equals-hashcode.md @@ -225,7 +225,7 @@ result = (31*1 + Integer(18).hashCode()) * 31 + String("张三").hashCode(); ----- -《**教妹学 Java**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! +《**Java 程序员进阶之路**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! 图片没显示的话,可以微信搜索「沉默王二」关注 diff --git a/docs/enum/enum.md b/docs/enum/enum.md index 4f5fa032b..300a6ab6e 100644 --- a/docs/enum/enum.md +++ b/docs/enum/enum.md @@ -284,6 +284,6 @@ public enum EasySingleton{ ----- -《**教妹学 Java**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! +《**Java 程序员进阶之路**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! 图片没显示的话,可以微信搜索「沉默王二」关注 \ No newline at end of file diff --git a/docs/exception/shijian.md b/docs/exception/shijian.md index 1f7783bbe..c3c6e8a51 100644 --- a/docs/exception/shijian.md +++ b/docs/exception/shijian.md @@ -206,7 +206,7 @@ public int checkReturn() { ---- -《**教妹学 Java**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! +《**Java 程序员进阶之路**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! 图片没显示的话,可以微信搜索「沉默王二」关注 diff --git a/docs/fanshe/fanshe.md b/docs/fanshe/fanshe.md index edef74b13..0af7c3831 100644 --- a/docs/fanshe/fanshe.md +++ b/docs/fanshe/fanshe.md @@ -315,7 +315,7 @@ Method[] methods2 = System.class.getMethods(); ----- -《**教妹学 Java**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! +《**Java 程序员进阶之路**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! 图片没显示的话,可以微信搜索「沉默王二」关注 diff --git a/docs/generic/true-generic.md b/docs/generic/true-generic.md index 62d8af6d1..167736f66 100644 --- a/docs/generic/true-generic.md +++ b/docs/generic/true-generic.md @@ -220,6 +220,6 @@ Project Valhalla:正在进行当中的 OpenJDK 项目,计划给未来的 Jav ----- -《**教妹学 Java**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! +《**Java 程序员进阶之路**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! 图片没显示的话,可以微信搜索「沉默王二」关注 \ No newline at end of file diff --git a/docs/keywords/java-instanceof.md b/docs/keywords/java-instanceof.md index 6dfd77e21..8529017eb 100644 --- a/docs/keywords/java-instanceof.md +++ b/docs/keywords/java-instanceof.md @@ -135,6 +135,6 @@ if (obj instanceof String s) { ----- -《**教妹学 Java**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! +《**Java 程序员进阶之路**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! 图片没显示的话,可以微信搜索「沉默王二」关注 \ No newline at end of file diff --git a/docs/object-class/java-interface.md b/docs/object-class/java-interface.md index 5c5c17217..4cb0e3d6a 100644 --- a/docs/object-class/java-interface.md +++ b/docs/object-class/java-interface.md @@ -1,6 +1,6 @@ ## 接口 -“哥,我看你朋友圈说《教妹学 Java》专栏收到了第一笔赞赏呀,虽然只有一块钱,但我也替你感到开心。”三妹的脸上洋溢着自信的微笑,仿佛这钱是打给她的一样。 +“哥,我看你朋友圈说《Java 程序员进阶之路》专栏收到了第一笔赞赏呀,虽然只有一块钱,但我也替你感到开心。”三妹的脸上洋溢着自信的微笑,仿佛这钱是打给她的一样。 ![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/object-class/interface-01.png) @@ -322,6 +322,6 @@ for (Shape shape : shapes) { ----- -《**教妹学 Java**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! +《**Java 程序员进阶之路**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! 图片没显示的话,可以微信搜索「沉默王二」关注 \ No newline at end of file diff --git a/docs/overview/javadoc.md b/docs/overview/javadoc.md index 9a71d4712..fe5d3c06c 100644 --- a/docs/overview/javadoc.md +++ b/docs/overview/javadoc.md @@ -169,6 +169,6 @@ public class Test { ----- -《**教妹学 Java**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! +《**Java 程序员进阶之路**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! 图片没显示的话,可以微信搜索「沉默王二」关注 \ No newline at end of file diff --git a/docs/string/split.md b/docs/string/split.md index 13a7537b6..960e86599 100644 --- a/docs/string/split.md +++ b/docs/string/split.md @@ -211,6 +211,6 @@ if (cmower.contains(",")) { ---- -《**教妹学 Java**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! +《**Java 程序员进阶之路**》预计一个月左右会有一次内容更新和完善,大家在我的公众号 **沉默王二** 后台回复“**03**” 即可获取最新版!如果觉得内容不错的话,欢迎转发分享! 图片没显示的话,可以微信搜索「沉默王二」关注 \ No newline at end of file -- GitLab