“朋友,我希望你現在已經意識到數組在編程中有多麼有用了?”
“毫無疑問,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