1.Arrays
クラス
前に述べたように、配列は非常に便利で、プログラミングで頻繁に使用されます。
Java の作成者は、Java プログラマが配列を扱うときに同じコードを書くことが多いことにすぐに気づきました。たとえば、配列の一部を別の配列にコピーしたり、配列の各セルに同じ値を入力するコードを作成したり、配列の内容を便利な形式で表示したりできます。
そのため、特別なArrays
クラス (正式名はjava.util.Arrays
) を作成し、最も一般的な配列関連のアクションをそのクラスに組み込みました。
あらゆる場面に対応する多くの方法がありますが、最初に、そのうちの最も単純で最も頻繁に使用される 10 個だけを検討します。
2.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 には次の文字列が含まれます。
|
|
変数str には次の文字列が含まれます。
|
|
変数str には次の文字列が含まれます。
|
3.Arrays.deepToString()
しかし、2 次元配列を (表示するために) 文字列using the Arrays.toString()
メソッドに変換しようとすると、見覚えのあるものが表示されます。
[I@37afeb11, I@37afeb21, I@37afeb31]
これはすべて、2 次元配列のセルに 1 次元配列への参照が格納されているためです。そして、一次元配列はどのように文字列に変換されるのでしょうか? まさに上で見たとおりです。
何ができるでしょうか?2 次元配列を正しく表示するにはどうすればよいでしょうか?
この目的のために、Arrays
クラスには別の特別なメソッドがあります — deepToString()
。呼び出すと次のようになります。
String str = Arrays.deepToString(name);
このメソッドには、2 次元、1 次元、3 次元、または一般に任意の次元の配列を渡すことができ、常に配列の要素が表示されます。
注:このArrays.deepToString()
メソッドは、プリミティブの 1 次元配列 (たとえば、int[]
) では機能しません。
例:
|
変数str には次の文字列が含まれます。
|
|
変数str には次の文字列が含まれます。
|
|
変数str には次の文字列が含まれます。
|
4.Arrays.equals()
画面上に配列を表示する方法はわかりましたが、配列を比較する場合はどうすればよいでしょうか?
文字列を比較するにはequals
とequalsIgnoreCase
メソッドがありますが、配列にはどのようなメソッドがあるのでしょうか?
良いニュースは、配列にはequals
メソッドがあるということです。悪いニュースは、配列の内容を比較しないことです。配列のメソッドは演算子equals
と同じことを行い==
、参照を比較します。例:
例:
|
false (参照が等しくない) |
|
2 つの配列の参照を単純に比較するequals 方法。(参照が等しくない) arrays false |
何ができるでしょうか?配列の内容に基づいて配列を比較するにはどうすればよいでしょうか?
そして再びArrays
、 、より具体的にはそのArrays.equals()
方法が私たちの助けになります。これを次のように呼びます。
Arrays.equals(name1, name2)
このメソッドは、true
配列の長さが同じで、その要素が等しい場合に戻ります。それ以外の場合は、 を返しますfalse
。
例:
|
2 つの配列の参照を単純に比較するequals 方法。(参照が等しくない) arrays false |
|
true (内容は同等です) |
|
false (配列の内容が異なります) |
5.Arrays.deepEquals()
そして、おそらくすでにご想像のとおり、このArrays.equals
メソッドは 2 次元配列に対しては正しく機能しません。このメソッドは、要素が 1 次元配列のアドレスである 1 次元配列のように 2 次元配列を扱います。
そこで、多次元配列 ( n = 1, 2, 3,...
) を正確に比較するために、彼らはこの方法を思いつきましたArrays.deepEquals()
。呼び出すと次のようになります。
Arrays.deepEquals(name1, name2)
メソッドは戻りますtrue
配列の長さが同じで、その要素が等しい場合。それ以外の場合は返されますfalse
。配列内の要素も配列である場合、Arrays.deepEquals()
メソッドはそれらを比較するために使用されます。
例:
|
2 つの配列の参照を単純に比較するequals 方法。(参照が等しくない) arrays false |
|
このメソッドは、 と を参照を格納する 1 次元配列としてArrays.equals 比較します。それらにはさまざまな参照が含まれています。(配列の内容は等しくない) x1 x2 false |
|
true (内容は同等です) |
GO TO FULL VERSION