Skip to content

Commit bed1357

Browse files
committed
优化常用工具类
1 parent 23b1c52 commit bed1357

File tree

115 files changed

+3138
-927
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

115 files changed

+3138
-927
lines changed

README.md

+6-4
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@
153153
- [聊聊Java中的不可变对象](docs/basic-extra-meal/immutable.md)
154154
- [方法重写 Override 和方法重载 Overload 有什么区别?](docs/basic-extra-meal/override-overload.md)
155155
- [深入理解Java中的注解](docs/basic-extra-meal/annotation.md)
156+
- [Java枚举:小小enum,优雅而干净](docs/basic-extra-meal/enum.md)
156157

157158
## 集合框架(容器)
158159

@@ -194,11 +195,13 @@
194195

195196
## 常用工具类
196197

198+
- [Java Scanner:扫描控制台输入的工具类](docs/common-tool/scanner.md)
197199
- [Java Arrays:专为数组而生的工具类](docs/common-tool/arrays.md)
198-
- [Java Collections:专为集合框架而生的工具类](docs/common-tool/collections.md)
200+
- [Objects:专为操作Java对象而生的工具类](docs/common-tool/Objects.md)
201+
- [Java Collections:专为集合而生的工具类](docs/common-tool/collections.md)
199202
- [Hutool:国产良心工具包,让你的Java变得更甜](docs/common-tool/hutool.md)
200-
- [Guava:Google开源的工具库,太强大了](docs/common-tool/guava.md)
201-
- [这10个工具类,让我的开发效率提升了50%](docs/common-tool/utils.md)
203+
- [Guava:Google开源的Java工具库,太强大了](docs/common-tool/guava.md)
204+
- [其他常用工具类:IpUtil、CollectionUtils、StringUtils、MDC、ClassUtils、BeanUtils、ReflectionUtils](docs/common-tool/utils.md)
202205

203206
## Java新特性
204207

@@ -219,7 +222,6 @@
219222
- [为什么JDK源码中,无限循环大多使用for(;;)而不是while(true)?](docs/basic-extra-meal/jdk-while-for-wuxian-xunhuan.md)
220223
- [instanceof关键字是如何实现的?](docs/basic-extra-meal/instanceof-jvm.md)
221224
- [Java不能实现真正泛型的原因是什么?](docs/basic-extra-meal/true-generic.md)
222-
- [新来个技术总监,彻底把 Java 枚举(enum)讲清楚了](docs/basic-extra-meal/enum.md)
223225
- [大白话说清楚Java反射:入门、使用、原理](docs/basic-extra-meal/fanshe.md)
224226

225227
## Java网络编程

docs/.vuepress/sidebar.ts

+8-7
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ export const sidebarConfig = sidebar({
162162
"basic-extra-meal/immutable",
163163
"basic-extra-meal/override-overload",
164164
"basic-extra-meal/annotation",
165+
"basic-extra-meal/enum",
165166
],
166167
},
167168
{
@@ -182,7 +183,6 @@ export const sidebarConfig = sidebar({
182183
"collection/arraydeque",
183184
"collection/PriorityQueue",
184185
"basic-extra-meal/comparable-omparator",
185-
186186
],
187187
},
188188
{
@@ -219,11 +219,13 @@ export const sidebarConfig = sidebar({
219219
collapsible: true,
220220
prefix:"common-tool/",
221221
children: [
222-
"arrays",
223-
"collections",
224-
"hutool",
225-
"guava",
226-
"utils",
222+
"scanner",
223+
"arrays",
224+
"Objects",
225+
"collections",
226+
"hutool",
227+
"guava",
228+
"utils",
227229
],
228230
},
229231
{
@@ -252,7 +254,6 @@ export const sidebarConfig = sidebar({
252254
"jdk-while-for-wuxian-xunhuan",
253255
"instanceof-jvm",
254256
"true-generic",
255-
"enum",
256257
"fanshe",
257258
],
258259
},

docs/array/array.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
2-
title: 一文吃透Java数组
3-
shortTitle: 吃透Java数组
2+
title: 一文吃透Java数组(非常特殊的对象)
3+
shortTitle: Java数组
44
category:
55
- Java核心
66
tag:
@@ -9,10 +9,10 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
99
head:
1010
- - meta
1111
- name: keywords
12-
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java数组,数组
12+
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java数组,数组
1313
---
1414

15-
# 4.1 一文吃透Java数组
15+
# 4.1 Java数组
1616

1717
“二哥,我看你公众号的一篇文章里提到,[ArrayList](https://tobebetterjavaer.com/collection/arraylist.html) 的内部是用数组实现的,我就对数组非常感兴趣,想深入地了解一下,今天终于到这个环节了,好期待呀!”三妹的语气里显得很兴奋。
1818

docs/array/double-array.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
99
head:
1010
- - meta
1111
- name: keywords
12-
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java二维数组,数组
12+
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java二维数组,数组
1313
---
1414

1515
# 4.2 二维数组
@@ -18,7 +18,7 @@ head:
1818

1919
“好啊,本来不打算讲了,因为开发中用的其实不多,也很简单,就从一维到二维,也没啥可讲的,就简单聊聊吧。”我掐灭了手中的华子,长呼一口烟,飘过三妹的头顶,引起一阵轻微的咳嗽声(😂)
2020

21-
### 什么是二维数组
21+
### 01、什么是二维数组
2222

2323
二维数组是一种数据类型,可以存储多行和多列的数据。它由一系列的行和列组成,每个元素都可以通过一个行索引和列索引来访问。例如,一个3行4列的二维数组可以表示为以下形式:
2424

@@ -34,7 +34,7 @@ array = [
3434

3535
使用二维数组可以有效地存储和处理表格数据,如矩阵、图像、地图等等。
3636

37-
### 如何在 Java 中声明一个二维数组
37+
### 02、创建二维数组
3838

3939
要在 Java 中创建二维数组,你必须指定要存储在数组中的数据类型,后跟两个方括号和数组的名称。
4040

@@ -51,7 +51,7 @@ int[][] oddNumbers = { {1, 3, 5, 7}, {9, 11, 13, 15} };
5151
```
5252

5353

54-
### 如何在 Java 中访问二维数组中的元素
54+
### 03、访问二维数组中的元素
5555

5656
我们可以使用两个方括号来访问二维中的元素。
5757

@@ -154,7 +154,7 @@ for(int i = 0; i < oddNumbers.length; i++){
154154

155155
上面的代码将会打印出 `oddNumbers` 数组中的所有项目。
156156

157-
### 二维数组打印杨辉三角
157+
### 04、二维数组打印杨辉三角
158158

159159
“三妹,上次学一维数组的时候留了一道题,要你尝试用二维数组打印杨辉三角,你试过了吗?”
160160

docs/array/print.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
99
head:
1010
- - meta
1111
- name: keywords
12-
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java数组,java打印数组
12+
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java数组,java打印数组
1313
---
1414

1515
# 4.3 如何优雅地打印Java数组?

docs/basic-extra-meal/48-keywords.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,Java中
99
head:
1010
- - meta
1111
- name: keywords
12-
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,Java保留字,Java关键字,关键字,保留字
12+
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,Java保留字,Java关键字,关键字,保留字
1313
---
1414

1515
# 3.1 48个关键字和2个保留字

docs/basic-extra-meal/Overriding.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
99
head:
1010
- - meta
1111
- name: keywords
12-
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java,重写,Overriding
12+
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,重写,Overriding
1313
---
1414

1515

docs/basic-extra-meal/annotation.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
99
head:
1010
- - meta
1111
- name: keywords
12-
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java,注解,annotation,java 注解,java annotation
12+
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,注解,annotation,java 注解,java annotation
1313
---
1414

1515
# 5.22 Java注解

docs/basic-extra-meal/box.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
99
head:
1010
- - meta
1111
- name: keywords
12-
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,装箱,拆箱,包装类型
12+
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,装箱,拆箱,包装类型
1313
---
1414

1515

docs/basic-extra-meal/class-object.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
99
head:
1010
- - meta
1111
- name: keywords
12-
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java,class,object
12+
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,class,object
1313
---
1414

1515

docs/basic-extra-meal/comparable-omparator.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
99
head:
1010
- - meta
1111
- name: keywords
12-
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java,java Comparable和Comparator,java Comparable, java Comparator,Comparable Comparator
12+
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,java Comparable和Comparator,java Comparable, java Comparator,Comparable Comparator
1313
---
1414

1515
# 6.14 Comparable和Comparator

docs/basic-extra-meal/deep-copy.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
99
head:
1010
- - meta
1111
- name: keywords
12-
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java,深拷贝,浅拷贝
12+
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,深拷贝,浅拷贝
1313
---
1414

1515
“哥,听说浅拷贝和深拷贝是 Java 面试中经常会被问到的一个问题,是这样吗?”

docs/basic-extra-meal/enum.md

+20-19
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: 新来个技术总监,彻底把 Java 枚举(enum)讲清楚了
2+
title: Java枚举:小小enum,优雅而干净
33
shortTitle: Java枚举(enum)
44
category:
55
- Java核心
@@ -9,9 +9,11 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
99
head:
1010
- - meta
1111
- name: keywords
12-
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java,枚举,enum
12+
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,枚举,enum,java 枚举,java enum
1313
---
1414

15+
# 5.23 Java枚举
16+
1517
“今天我们来学习枚举吧,三妹!”我说,“同学让你去她家玩了两天,感觉怎么样呀?”
1618

1719
“心情放松了不少。”三妹说,“可以开始学 Java 了,二哥。”
@@ -127,19 +129,19 @@ if(player.getType().equals(Player.PlayerType.BASKETBALL)){};
127129

128130
```java
129131
switch (playerType) {
130-
case TENNIS:
131-
return "网球运动员费德勒";
132-
case FOOTBALL:
133-
return "足球运动员C罗";
134-
case BASKETBALL:
135-
return "篮球运动员詹姆斯";
136-
case UNKNOWN:
137-
throw new IllegalArgumentException("未知");
138-
default:
139-
throw new IllegalArgumentException(
140-
"运动员类型: " + playerType);
132+
case TENNIS:
133+
return "网球运动员费德勒";
134+
case FOOTBALL:
135+
return "足球运动员C罗";
136+
case BASKETBALL:
137+
return "篮球运动员詹姆斯";
138+
case UNKNOWN:
139+
throw new IllegalArgumentException("未知");
140+
default:
141+
throw new IllegalArgumentException(
142+
"运动员类型: " + playerType);
141143

142-
}
144+
}
143145
```
144146

145147
“如果枚举中需要包含更多信息的话,可以为其添加一些字段,比如下面示例中的 name,此时需要为枚举添加一个带参的构造方法,这样就可以在定义枚举时添加对应的名称了。”我继续说。
@@ -166,11 +168,10 @@ public enum PlayerType {
166168

167169
“来吧,我准备好了。”
168170

169-
“EnumSet 是一个专门针对枚举类型的 Set 接口(后面会讲)的实现类,它是处理枚举类型数据的一把利器,非常高效。”我说,“从名字上就可以看得出,EnumSet 不仅和 Set 有关系,和枚举也有关系。”
171+
“EnumSet 是一个专门针对枚举类型的 [Set 接口](https://tobebetterjavaer.com/collection/gailan.html)(后面会讲)的实现类,它是处理枚举类型数据的一把利器,非常高效。”我说,“从名字上就可以看得出,EnumSet 不仅和 Set 有关系,和枚举也有关系。”
170172

171173
“因为 EnumSet 是一个抽象类,所以创建 EnumSet 时不能使用 new 关键字。不过,EnumSet 提供了很多有用的静态工厂方法。”
172174

173-
174175
![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/enum/enum-02.png)
175176

176177
“来看下面这个例子,我们使用 `noneOf()` 静态工厂方法创建了一个空的 PlayerType 类型的 EnumSet;使用 `allOf()` 静态工厂方法创建了一个包含所有 PlayerType 类型的 EnumSet。”
@@ -216,7 +217,7 @@ EnumMap<PlayerType, String> enumMap = new EnumMap<>(PlayerType.class);
216217

217218
![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/enum/enum-04.png)
218219

219-
和 HashMap(后面会讲)的使用方法大致相同,来看下面的例子。
220+
[HashMap](https://tobebetterjavaer.com/collection/hashmap.html)(后面会讲)的使用方法大致相同,来看下面的例子。
220221

221222
```java
222223
EnumMap<PlayerType, String> enumMap = new EnumMap<>(PlayerType.class);
@@ -276,7 +277,7 @@ public class Singleton {
276277
}
277278
```
278279

279-
“要用到 volatilesynchronized 关键字等等,但枚举的出现,让代码量减少到极致。”
280+
“要用到 [volatile](https://tobebetterjavaer.com/thread/volatile.html)[synchronized](https://tobebetterjavaer.com/thread/synchronized-1.html) 关键字等等,但枚举的出现,让代码量减少到极致。”
280281

281282
```java
282283
public enum EasySingleton{
@@ -286,7 +287,7 @@ public enum EasySingleton{
286287

287288
“就这?”三妹睁大了眼睛。
288289

289-
“对啊,枚举默认实现了 Serializable 接口,因此 Java 虚拟机可以保证该类为单例,这与传统的实现方式不大相同。传统方式中,我们必须确保单例在反序列化期间不能创建任何新实例。”我说。
290+
“对啊,枚举默认实现了 [Serializable 接口](https://tobebetterjavaer.com/io/Serializbale.html),因此 Java 虚拟机可以保证该类为单例,这与传统的实现方式不大相同。传统方式中,我们必须确保单例在反序列化期间不能创建任何新实例。”我说。
290291

291292
“好了,关于枚举就讲这么多吧,三妹,你把这些代码都手敲一遍吧!”
292293

docs/basic-extra-meal/equals-hashcode.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
99
head:
1010
- - meta
1111
- name: keywords
12-
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java,hashcode,equals
12+
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,hashcode,equals
1313
---
1414

1515
“二哥,我在读《Effective Java》 的时候,第 11 条规约说重写 equals 的时候必须要重写 hashCode 方法,这是为什么呀?”三妹单刀直入地问。

docs/basic-extra-meal/fanshe.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
99
head:
1010
- - meta
1111
- name: keywords
12-
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java,反射
12+
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,反射
1313
---
1414

1515
“二哥,什么是反射呀?”三妹开门见山地问。

docs/basic-extra-meal/generic.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
99
head:
1010
- - meta
1111
- name: keywords
12-
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java,泛型,java 泛型,java generic
12+
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,泛型,java 泛型,java generic
1313
---
1414

1515
# 6.6 泛型

docs/basic-extra-meal/hashcode.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
99
head:
1010
- - meta
1111
- name: keywords
12-
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java,hashcode
12+
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,hashcode
1313
---
1414

1515

docs/basic-extra-meal/immutable.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
99
head:
1010
- - meta
1111
- name: keywords
12-
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java,不可变对象,immutable
12+
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,不可变对象,immutable
1313
---
1414

1515
# 5.20 Java中的不可变对象

docs/basic-extra-meal/instanceof-jvm.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
99
head:
1010
- - meta
1111
- name: keywords
12-
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java,instanceof
12+
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,instanceof
1313
---
1414

1515

docs/basic-extra-meal/instanceof.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
99
head:
1010
- - meta
1111
- name: keywords
12-
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java,instanceof,java instanceof
12+
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,instanceof,java instanceof
1313
---
1414

1515
# 5.19 instanceof关键字

docs/basic-extra-meal/int-cache.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
99
head:
1010
- - meta
1111
- name: keywords
12-
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,Integer,java数据类型缓存池,java IntegerCache,Java 基本数据类型缓存池
12+
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,Integer,java数据类型缓存池,java IntegerCache,Java 基本数据类型缓存池
1313
---
1414

1515
# 3.5 基本数据类型缓存池

docs/basic-extra-meal/java-naming.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,Java命
99
head:
1010
- - meta
1111
- name: keywords
12-
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,Java命名规范,命名规范
12+
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,Java命名规范,命名规范
1313
---
1414

1515
## 3.2 Java命名规范

docs/basic-extra-meal/java-unicode.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
99
head:
1010
- - meta
1111
- name: keywords
12-
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,unicode,utf-8
12+
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,unicode,utf-8
1313
---
1414

1515
“二哥,[上一篇](https://tobebetterjavaer.com/basic-grammar/basic-data-type.html)文章中提到了 Unicode,说 Java 中的

0 commit comments

Comments
 (0)