“朋友,我希望你现在已经意识到数组在编程中有多么有用了?”
“毫无疑问,Rishi!我已经完成了不止一项任务。”
“你的任务有没有重复的动作?你一遍又一遍地做的那种。”
“如果我没理解错的话,你的意思是在不同的任务中执行类似的操作?例如,到处都使用循环来显示数组的内容——我已经厌倦了那样做!”
“是的,这就是我的意思。Java 的创造者注意到 Java 程序员在使用数组时经常编写相同的代码。例如,将数组的一部分复制到另一个数组的代码,或者用相同的代码填充数组的每个单元格的代码值。或者你的例子:在屏幕上以可读形式显示数组内容的代码。
“真正的程序员有一个非常重要的规则:不要重复自己。你会同意做多余的工作是错误的——你不会因此得到报酬。有效的工作是高薪的,相信我。顺便说一句,新手的大量重复代码立即可识别代码。
“Java的创造者深思熟虑,创造了一个特殊的Arrays
类(全称java.util.Arrays
),将最流行的数组相关动作放入其中。”
“嗯……很有意思,那它到底有什么?
“它有很多适用于各种场合的方法,但首先我们只考虑其中的 10 种——最简单和最常用的。
Arrays.toString()
“我们要看的第一种方法是Arrays.toString()
。但首先,了解一些背景知识。
“Java 中的每个数组都有一个toString()
方法,它返回‘数组的文本表示’。您可以使用以下语句获取数组的文本表示:
String str = name.toString();
“name
数组变量的名称在哪里,str
是将存储数组的字符串表示形式的变量的名称。朋友,您是否尝试过使用该方法将数组打印到屏幕上?System.out.println(name)
我承认,那确实发生了。我看到了一些乱码。我决定远离伤害并继续使用循环。
“很可能你看到了类似的东西:
I@37afeb11
"第一个字母I
表示它是一个int
数组,后面的符号@
是单个对象在内存中的地址,你可以认为是数组在内存中的地址。一方面,这恰恰是存储在数组中的信息数组变量,但另一方面,你期待一些不同的东西,不是吗?”
“完全正确!我正打算查看数组中的值。这是我最没有想到的事情。”
“这正是他们想出这个Arrays.toString()
方法的原因——显示数组的值。我们这样称呼它:
String str = Arrays.toString(name);
例子:
|
该str 变量将包含字符串"[1, 2, 3]" |
|
该str 变量将包含字符串"[]" |
|
该str 变量将包含字符串"[Hi, How's, life?]" |
Arrays.deepToString()
“但是,toString()
对于二维数组,该方法并不适用。换句话说,如果您尝试调用Arrays.toString()
,您会看到一些熟悉的东西:
[I@37afeb11, I@37afeb21, I@37afeb31]
“这都是因为二维数组的单元格存储了对一维数组的引用。一维数组如何转换为字符串?正如你在上面看到的那样。
“那怎么办?如何正确显示一个二维数组?”
“Java 的创造者也预料到了这一点。为此,该类Arrays
有另一个特殊的方法—— deepToString()
。调用它看起来像这样:
String str = Arrays.deepToString(name);
“此方法可以传递二维、一维、三维或一般情况下任何维度的数组,并且它将始终显示数组的元素。
例子:
|
该str 变量将包含字符串"[1, 2, 3]" |
|
该str 变量将包含字符串"[[1, 1], [2, 2], [3, 3]]" |
|
该str 变量将包含字符串"[[[1, 2, 3], [1]], [[]]]" |
Arrays.equals()
“我们想出了如何在屏幕上显示数组。比较数组呢?你还记得我们可以用什么方法来比较字符串吗?”
“我一般用的equals
方法!
"Yes, equals
, and also equalsIgnoreCase
(比较字符串而不考虑大写和小写)。
“好消息:你也可以使用equals
数组的方法。坏消息:它不比较数组的内容。equals
数组的方法与运算符做同样的事情==
——它比较引用。
例子:
|
false (引用不相等) |
|
equals 的方法只是arrays 比较两个数组的引用。false (引用不相等) |
“那我们怎么办?我们如何根据数组的内容比较数组?”
“Arrays
类再次来拯救我们。更具体地说,它的Arrays.equals()
方法。这就是我们如何称呼它:
Arrays.equals(name1, name2)
true
“如果数组长度相等且它们的元素相等,则该方法返回。否则,它返回false
。
例子:
|
equals 的方法只是arrays 比较两个数组的引用。false (引用不相等) |
|
true (内容相同) |
|
false (数组的内容不同) |
Arrays.deepEquals()
“而且,正如您可能已经猜到的那样,该Arrays.equals
方法不适用于二维数组:它将二维数组视为一维数组,其元素是一维数组的地址。
“因此,为了正确比较多维数组 ( n = 1, 2, 3,...
),他们想出了这个Arrays.deepEquals()
方法。调用它看起来像这样:
Arrays.deepEquals(name1, name2)
true
“如果数组长度相等且它们的元素相等,则该方法返回。否则,它返回false
. 如果数组内部的元素也是数组,则Arrays.deepEquals()
使用该方法对它们进行比较,依此类推。
例子:
|
equals 的方法只是arrays 比较两个数组的引用。false (引用不相等) |
|
该Arrays.equals 方法将比较和作为存储引用的一维数组。它们包含不同的引用。(数组的内容不相等) x1 x2 false |
|
true (内容相同) |
“谢谢你,Rishi!这节课正是我所需要的,让我以后的生活更轻松、更快乐。现在我将使用 Arrays 类的方法,更快地编写我的程序。
“这就是我所指望的,哈哈。但是这些并不是 Arrays 类中所有有趣的方法。下次我会告诉你其他的。”
GO TO FULL VERSION