Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
沉默王二
Jmx Java
提交
2626d5c0
J
Jmx Java
项目概览
沉默王二
/
Jmx Java
10 个月 前同步成功
通知
160
Star
18
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
Jmx Java
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
2626d5c0
编写于
2月 22, 2023
作者:
沉默王二
💬
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
数组
上级
a360a520
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
191 addition
and
7 deletion
+191
-7
docs/array/array.md
docs/array/array.md
+1
-1
docs/array/double-array.md
docs/array/double-array.md
+1
-1
docs/array/print.md
docs/array/print.md
+15
-3
二哥的 Java 进阶之路.md
二哥的 Java 进阶之路.md
+174
-2
未找到文件。
docs/array/array.md
浏览文件 @
2626d5c0
...
...
@@ -12,7 +12,7 @@ head:
content
:
Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java数组,数组
---
## 4.1 Java数组
## 4.1
一文吃透
Java数组
“二哥,我看你公众号的一篇文章里提到,
[
ArrayList
](
https://tobebetterjavaer.com/collection/arraylist.html
)
的内部是用数组实现的,我就对数组非常感兴趣,想深入地了解一下,今天终于到这个环节了,好期待呀!”三妹的语气里显得很兴奋。
...
...
docs/array/double-array.md
浏览文件 @
2626d5c0
...
...
@@ -12,7 +12,7 @@ head:
content
:
Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java二维数组,数组
---
## 聊聊Java的二维数组
##
4.2
聊聊Java的二维数组
“二哥,今天我们简单过一下二维数组吧,挺简单的。”三妹放下手机对我说。
...
...
docs/array/print.md
浏览文件 @
2626d5c0
...
...
@@ -9,15 +9,19 @@ 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.3 如何优雅地打印Java数组?
“哥,
[
之前听你说,数组也是一个对象
](
https://tobebetterjavaer.com/array/array.html
)
,但 Java 中并未明确的定义这样一个类。”看来三妹有在用心地学习。
“是的,因此数组也就没有机会覆盖
`Object.toString()`
方法。如果尝试直接打印数组的话,输出的结果并不是我们预期的结果。”我接着三妹的话继续说。
“那怎么打印数组呢?”三妹心有灵犀地把今天的核心问题提了出来。
### 为什么不能直接打印数组
“首先,我们来看一下,为什么不能直接打印数组,直接打印的话,会出现什么问题。”
来看这样一个例子。
...
...
@@ -59,6 +63,8 @@ public final class String
“好了,不讨论这个了。”我怕话题扯远了,扯到我自己也答不出来就尴尬了,赶紧把三妹的思路拽了回来。
### stream 流打印 Java 数组
“我们来看第一种打印数组的方法,使用时髦一点的
[
Stream 流
](
https://tobebetterjavaer.com/java8/stream.html
)
。”
第一种形式:
...
...
@@ -89,7 +95,9 @@ Arrays.stream(cmowers).forEach(System.out::println);
没错,这三种方式都可以轻松胜任本职工作,并且显得有点高大上,毕竟用到了 Stream,以及
[
lambda 表达式
](
https://tobebetterjavaer.com/java8/Lambda.html
)
。
“当然了,也可以使用比较土的方式,for 循环。甚至 for-each 也行。”
### for 循环打印 Java 数组
“当然了,也可以使用传统的方式,for 循环。甚至 for-each 也行。”
```
java
for
(
int
i
=
0
;
i
<
cmowers
.
length
;
i
++){
...
...
@@ -101,6 +109,8 @@ for (String s : cmowers) {
}
```
### Arrays 工具类打印 Java 数组
“哥,你难道忘了
[
上一篇
](
https://tobebetterjavaer.com/common-tool/arrays.html
)
在讲 Arrays 工具类的时候,提到过另外一种方法
`Arrays.toString()`
吗?”三妹看我一直说不到点子上,有点着急了。
“当然没有了,我认为
`Arrays.toString()`
是打印数组的最佳方式,没有之一。”我的情绪有点激动。
...
...
@@ -130,6 +140,8 @@ System.out.println(Arrays.toString(cmowers));
哇,打印格式不要太完美,不多不少!完全是我们预期的结果:
`[]`
表明是一个数组,
`,`
点和空格用来分割元素。
### Arrays工具类打印二维数组
“哥,那如果我想打印二维数组呢?”
“可以使用
`Arrays.deepToString()`
方法。”
...
...
@@ -145,7 +157,7 @@ System.out.println(Arrays.deepToString(deepArray));
[[沉默, 王二], [一枚有趣的程序员]]
```
-------
### POJO 的打印规约
“说到打印,三妹,哥给你提醒一点。阿里巴巴的 Java 开发手册上有这样一条规约,你看。”
...
...
二哥的 Java 进阶之路.md
浏览文件 @
2626d5c0
...
...
@@ -2870,7 +2870,7 @@ public class TernaryOperator {
# 第四章:数组&字符串
## 4.1 Java数组
## 4.1
一文吃透
Java数组
“二哥,我看你公众号的一篇文章里提到,
[
ArrayList
](
https://tobebetterjavaer.com/collection/arraylist.html
)
的内部是用数组实现的,我就对数组非常感兴趣,想深入地了解一下,今天终于到这个环节了,好期待呀!”三妹的语气里显得很兴奋。
...
...
@@ -3120,7 +3120,7 @@ int index = Arrays.binarySearch(anArray, 4);
![](
https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongzhonghao.png
)
## 聊聊Java的二维数组
##
4.2
聊聊Java的二维数组
“二哥,今天我们简单过一下二维数组吧,挺简单的。”三妹放下手机对我说。
...
...
@@ -3318,6 +3318,178 @@ public class YangHuiTriangle {
1 5 10 10 5 1
```
----
最近整理了一份牛逼的学习资料,包括但不限于Java基础部分(JVM、Java集合框架、多线程),还囊括了
**数据库、计算机网络、算法与数据结构、设计模式、框架类Spring、Netty、微服务(Dubbo,消息队列) 网关**
等等等等……详情戳:
[
可以说是2022年全网最全的学习和找工作的PDF资源了
](
https://tobebetterjavaer.com/pdf/programmer-111.html
)
微信搜
**沉默王二**
或扫描下方二维码关注二哥的原创公众号沉默王二,回复
**111**
即可免费领取。
![](
https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongzhonghao.png
)
## 4.3 如何优雅地打印Java数组?
“哥,
[
之前听你说,数组也是一个对象
](
https://tobebetterjavaer.com/array/array.html
)
,但 Java 中并未明确的定义这样一个类。”看来三妹有在用心地学习。
“是的,因此数组也就没有机会覆盖
`Object.toString()`
方法。如果尝试直接打印数组的话,输出的结果并不是我们预期的结果。”我接着三妹的话继续说。
“那怎么打印数组呢?”三妹心有灵犀地把今天的核心问题提了出来。
### 为什么不能直接打印数组
“首先,我们来看一下,为什么不能直接打印数组,直接打印的话,会出现什么问题。”
来看这样一个例子。
```
String [] cmowers = {"沉默","王二","一枚有趣的程序员"};
System.out.println(cmowers);
```
程序打印的结果是:
```
[Ljava.lang.String;@3d075dc0
```
`[Ljava.lang.String;`
表示字符串数组的 Class 名,@ 后面的是十六进制的 hashCode——这样的打印结果太“人性化”了,一般人表示看不懂!为什么会这样显示呢?查看一下
`java.lang.Object`
类的
`toString()`
方法就明白了。
```
java
public
String
toString
()
{
return
getClass
().
getName
()
+
"@"
+
Integer
.
toHexString
(
hashCode
());
}
```
再次证明,数组虽然没有显式定义成一个类,但它的确是一个对象,继承了祖先类 Object 的所有方法。
“哥,那为什么数组不单独定义一个类来表示呢?就像字符串 String 类那样呢?”三妹这个问题让人头大,但也好解释。
“一个合理的说法是 Java 将其隐藏了。假如真的存在这么一个类,就叫 Array.java 吧,我们假想一下它真实的样子,必须得有一个容器来存放数组的每一个元素,就像 String 类那样。”一边回答三妹,我一边打开了 String 类的源码。
```
java
public
final
class
String
implements
java
.
io
.
Serializable
,
Comparable
<
String
>,
CharSequence
{
/** The value is used for character storage. */
private
final
char
value
[];
}
```
“最终还是要用类似一种数组的形式来存放数组的元素,对吧?这就变得很没有必要了,不妨就把数组当做是一个没有形体的对象吧!”
“好了,不讨论这个了。”我怕话题扯远了,扯到我自己也答不出来就尴尬了,赶紧把三妹的思路拽了回来。
### stream 流打印 Java 数组
“我们来看第一种打印数组的方法,使用时髦一点的
[
Stream 流
](
https://tobebetterjavaer.com/java8/stream.html
)
。”
第一种形式:
```
java
Arrays
.
asList
(
cmowers
).
stream
().
forEach
(
s
->
System
.
out
.
println
(
s
));
```
第二种形式:
```
java
Stream
.
of
(
cmowers
).
forEach
(
System
.
out
::
println
);
```
第三种形式:
```
java
Arrays
.
stream
(
cmowers
).
forEach
(
System
.
out
::
println
);
```
打印的结果如下所示。
```
沉默
王二
一枚有趣的程序员
```
没错,这三种方式都可以轻松胜任本职工作,并且显得有点高大上,毕竟用到了 Stream,以及
[
lambda 表达式
](
https://tobebetterjavaer.com/java8/Lambda.html
)
。
### for 循环打印 Java 数组
“当然了,也可以使用传统的方式,for 循环。甚至 for-each 也行。”
```
java
for
(
int
i
=
0
;
i
<
cmowers
.
length
;
i
++){
System
.
out
.
println
(
cmowers
[
i
]);
}
for
(
String
s
:
cmowers
)
{
System
.
out
.
println
(
s
);
}
```
### Arrays 工具类打印 Java 数组
“哥,你难道忘了
[
上一篇
](
https://tobebetterjavaer.com/common-tool/arrays.html
)
在讲 Arrays 工具类的时候,提到过另外一种方法
`Arrays.toString()`
吗?”三妹看我一直说不到点子上,有点着急了。
“当然没有了,我认为
`Arrays.toString()`
是打印数组的最佳方式,没有之一。”我的情绪有点激动。
`Arrays.toString()`
可以将任意类型的数组转成字符串,包括基本类型数组和引用类型数组。该方法有多种重载形式。
![](
https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/array/print-01.png
)
使用
`Arrays.toString()`
方法来打印数组再优雅不过了,就像,就像,就像蒙娜丽莎的微笑。
![](
https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/array/print-02.png
)
(三妹看到这么一副图的时候忍不住地笑了)
“三妹,你不要笑,来,怀揣着愉快的心情看一下代码示例。”
```
java
String
[]
cmowers
=
{
"沉默"
,
"王二"
,
"一枚有趣的程序员"
};
System
.
out
.
println
(
Arrays
.
toString
(
cmowers
));
```
程序打印结果:
```
[沉默, 王二, 一枚有趣的程序员]
```
哇,打印格式不要太完美,不多不少!完全是我们预期的结果:
`[]`
表明是一个数组,
`,`
点和空格用来分割元素。
### Arrays工具类打印二维数组
“哥,那如果我想打印二维数组呢?”
“可以使用
`Arrays.deepToString()`
方法。”
```
java
String
[][]
deepArray
=
new
String
[][]
{{
"沉默"
,
"王二"
},
{
"一枚有趣的程序员"
}};
System
.
out
.
println
(
Arrays
.
deepToString
(
deepArray
));
```
打印结果如下所示。
```
[[沉默, 王二], [一枚有趣的程序员]]
```
### POJO 的打印规约
“说到打印,三妹,哥给你提醒一点。阿里巴巴的 Java 开发手册上有这样一条规约,你看。”
![](
https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/array/print-03.png
)
“什么是 POJO 呢,就是 Plain Ordinary Java Object 的缩写,一般在 Web 应用程序中建立一个数据库的映射对象时,我们称它为 POJO,这类对象不继承或不实现任何其它 Java 框架的类或接口。”
“对于这样的类,最好是重写一下它的
`toString()`
方法,方便查看这个对象到底包含了什么字段,好排查问题。”
“如果不重写的话,打印出来的 Java 对象就像直接打印数组的那样,一串谁也看不懂的字符序列。”
“可以借助 Intellij IDEA 生成重写的
`toString()`
方法,特别方便。”
“好的,哥,我记住了。以后遇到的话,我注意下。你去休息吧,我来敲一下你提到的这些代码,练一练。”
“OK,我走,我走。”
----
最近整理了一份牛逼的学习资料,包括但不限于Java基础部分(JVM、Java集合框架、多线程),还囊括了
**数据库、计算机网络、算法与数据结构、设计模式、框架类Spring、Netty、微服务(Dubbo,消息队列) 网关**
等等等等……详情戳:
[
可以说是2022年全网最全的学习和找工作的PDF资源了
](
https://tobebetterjavaer.com/pdf/programmer-111.html
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录