Skip to content

Commit

Permalink
优化常用工具类
Browse files Browse the repository at this point in the history
  • Loading branch information
itwanger committed Mar 29, 2023
1 parent 23b1c52 commit bed1357
Show file tree
Hide file tree
Showing 115 changed files with 3,138 additions and 927 deletions.
10 changes: 6 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@
- [聊聊Java中的不可变对象](docs/basic-extra-meal/immutable.md)
- [方法重写 Override 和方法重载 Overload 有什么区别?](docs/basic-extra-meal/override-overload.md)
- [深入理解Java中的注解](docs/basic-extra-meal/annotation.md)
- [Java枚举:小小enum,优雅而干净](docs/basic-extra-meal/enum.md)

## 集合框架(容器)

Expand Down Expand Up @@ -194,11 +195,13 @@

## 常用工具类

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

## Java新特性

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

## Java网络编程
Expand Down
15 changes: 8 additions & 7 deletions docs/.vuepress/sidebar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ export const sidebarConfig = sidebar({
"basic-extra-meal/immutable",
"basic-extra-meal/override-overload",
"basic-extra-meal/annotation",
"basic-extra-meal/enum",
],
},
{
Expand All @@ -182,7 +183,6 @@ export const sidebarConfig = sidebar({
"collection/arraydeque",
"collection/PriorityQueue",
"basic-extra-meal/comparable-omparator",

],
},
{
Expand Down Expand Up @@ -219,11 +219,13 @@ export const sidebarConfig = sidebar({
collapsible: true,
prefix:"common-tool/",
children: [
"arrays",
"collections",
"hutool",
"guava",
"utils",
"scanner",
"arrays",
"Objects",
"collections",
"hutool",
"guava",
"utils",
],
},
{
Expand Down Expand Up @@ -252,7 +254,6 @@ export const sidebarConfig = sidebar({
"jdk-while-for-wuxian-xunhuan",
"instanceof-jvm",
"true-generic",
"enum",
"fanshe",
],
},
Expand Down
8 changes: 4 additions & 4 deletions docs/array/array.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: 一文吃透Java数组
shortTitle: 吃透Java数组
title: 一文吃透Java数组(非常特殊的对象)
shortTitle: Java数组
category:
- Java核心
tag:
Expand All @@ -9,10 +9,10 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
head:
- - meta
- name: keywords
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java数组,数组
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java数组,数组
---

# 4.1 一文吃透Java数组
# 4.1 Java数组

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

Expand Down
10 changes: 5 additions & 5 deletions docs/array/double-array.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
head:
- - meta
- name: keywords
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java二维数组,数组
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java二维数组,数组
---

# 4.2 二维数组
Expand All @@ -18,7 +18,7 @@ head:

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

### 什么是二维数组
### 01、什么是二维数组

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

Expand All @@ -34,7 +34,7 @@ array = [

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

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

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

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


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

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

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

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

### 二维数组打印杨辉三角
### 04、二维数组打印杨辉三角

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

Expand Down
2 changes: 1 addition & 1 deletion docs/array/print.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
head:
- - meta
- name: keywords
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java数组,java打印数组
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java数组,java打印数组
---

# 4.3 如何优雅地打印Java数组?
Expand Down
2 changes: 1 addition & 1 deletion docs/basic-extra-meal/48-keywords.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,Java中
head:
- - meta
- name: keywords
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,Java保留字,Java关键字,关键字,保留字
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,Java保留字,Java关键字,关键字,保留字
---

# 3.1 48个关键字和2个保留字
Expand Down
2 changes: 1 addition & 1 deletion docs/basic-extra-meal/Overriding.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
head:
- - meta
- name: keywords
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java,重写,Overriding
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,重写,Overriding
---


Expand Down
2 changes: 1 addition & 1 deletion docs/basic-extra-meal/annotation.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
head:
- - meta
- name: keywords
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java,注解,annotation,java 注解,java annotation
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,注解,annotation,java 注解,java annotation
---

# 5.22 Java注解
Expand Down
2 changes: 1 addition & 1 deletion docs/basic-extra-meal/box.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
head:
- - meta
- name: keywords
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,装箱,拆箱,包装类型
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,装箱,拆箱,包装类型
---


Expand Down
2 changes: 1 addition & 1 deletion docs/basic-extra-meal/class-object.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
head:
- - meta
- name: keywords
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java,class,object
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,class,object
---


Expand Down
2 changes: 1 addition & 1 deletion docs/basic-extra-meal/comparable-omparator.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
head:
- - meta
- name: keywords
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java,java Comparable和Comparator,java Comparable, java Comparator,Comparable Comparator
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,java Comparable和Comparator,java Comparable, java Comparator,Comparable Comparator
---

# 6.14 Comparable和Comparator
Expand Down
2 changes: 1 addition & 1 deletion docs/basic-extra-meal/deep-copy.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
head:
- - meta
- name: keywords
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java,深拷贝,浅拷贝
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,深拷贝,浅拷贝
---

“哥,听说浅拷贝和深拷贝是 Java 面试中经常会被问到的一个问题,是这样吗?”
Expand Down
39 changes: 20 additions & 19 deletions docs/basic-extra-meal/enum.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: 新来个技术总监,彻底把 Java 枚举(enum)讲清楚了
title: Java枚举:小小enum,优雅而干净
shortTitle: Java枚举(enum)
category:
- Java核心
Expand All @@ -9,9 +9,11 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
head:
- - meta
- name: keywords
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java,枚举,enum
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,枚举,enum,java 枚举,java enum
---

# 5.23 Java枚举

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

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

```java
switch (playerType) {
case TENNIS:
return "网球运动员费德勒";
case FOOTBALL:
return "足球运动员C罗";
case BASKETBALL:
return "篮球运动员詹姆斯";
case UNKNOWN:
throw new IllegalArgumentException("未知");
default:
throw new IllegalArgumentException(
"运动员类型: " + playerType);
case TENNIS:
return "网球运动员费德勒";
case FOOTBALL:
return "足球运动员C罗";
case BASKETBALL:
return "篮球运动员詹姆斯";
case UNKNOWN:
throw new IllegalArgumentException("未知");
default:
throw new IllegalArgumentException(
"运动员类型: " + playerType);

}
}
```

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

“来吧,我准备好了。”

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

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


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

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

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

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

```java
EnumMap<PlayerType, String> enumMap = new EnumMap<>(PlayerType.class);
Expand Down Expand Up @@ -276,7 +277,7 @@ public class Singleton {
}
```

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

```java
public enum EasySingleton{
Expand All @@ -286,7 +287,7 @@ public enum EasySingleton{

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

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

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

Expand Down
2 changes: 1 addition & 1 deletion docs/basic-extra-meal/equals-hashcode.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
head:
- - meta
- name: keywords
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java,hashcode,equals
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,hashcode,equals
---

“二哥,我在读《Effective Java》 的时候,第 11 条规约说重写 equals 的时候必须要重写 hashCode 方法,这是为什么呀?”三妹单刀直入地问。
Expand Down
2 changes: 1 addition & 1 deletion docs/basic-extra-meal/fanshe.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
head:
- - meta
- name: keywords
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java,反射
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,反射
---

“二哥,什么是反射呀?”三妹开门见山地问。
Expand Down
2 changes: 1 addition & 1 deletion docs/basic-extra-meal/generic.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
head:
- - meta
- name: keywords
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java,泛型,java 泛型,java generic
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,泛型,java 泛型,java generic
---

# 6.6 泛型
Expand Down
2 changes: 1 addition & 1 deletion docs/basic-extra-meal/hashcode.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
head:
- - meta
- name: keywords
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java,hashcode
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,hashcode
---


Expand Down
2 changes: 1 addition & 1 deletion docs/basic-extra-meal/immutable.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
head:
- - meta
- name: keywords
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java,不可变对象,immutable
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,不可变对象,immutable
---

# 5.20 Java中的不可变对象
Expand Down
2 changes: 1 addition & 1 deletion docs/basic-extra-meal/instanceof-jvm.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
head:
- - meta
- name: keywords
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java,instanceof
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,instanceof
---


Expand Down
2 changes: 1 addition & 1 deletion docs/basic-extra-meal/instanceof.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
head:
- - meta
- name: keywords
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java,instanceof,java instanceof
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,instanceof,java instanceof
---

# 5.19 instanceof关键字
Expand Down
2 changes: 1 addition & 1 deletion docs/basic-extra-meal/int-cache.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
head:
- - meta
- name: keywords
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,Integer,java数据类型缓存池,java IntegerCache,Java 基本数据类型缓存池
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,Integer,java数据类型缓存池,java IntegerCache,Java 基本数据类型缓存池
---

# 3.5 基本数据类型缓存池
Expand Down
2 changes: 1 addition & 1 deletion docs/basic-extra-meal/java-naming.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,Java命
head:
- - meta
- name: keywords
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,Java命名规范,命名规范
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,Java命名规范,命名规范
---

## 3.2 Java命名规范
Expand Down
2 changes: 1 addition & 1 deletion docs/basic-extra-meal/java-unicode.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
head:
- - meta
- name: keywords
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,unicode,utf-8
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,unicode,utf-8
---

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

0 comments on commit bed1357

Please sign in to comment.