Arrays.equals と toString
配列を比較して出力します。
「Arrays.equals と toString」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全4レッスンが含まれています。
比較と出力
配列は、equalsやtoStringを内容の比較や表示に適した形ではオーバーライドしていません。ユーティリティクラスであるArraysには、要素の内容を実際に調べるequalsとtoStringが用意されています。
==では比較できない理由
配列に==を使うと、内容ではなく参照が比較されます。同じ要素を持つ別々の配列は、==では等しくありません。
public class Main {
public static void main(String[] args) {
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(a == b);
}
}Arrays.equals
Arrays.equals(a, b)は、両方の配列の長さが同じで、同じ位置の要素が等しい場合にtrueを返します。
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(Arrays.equals(a, b));
}
}順序が重要
要素の順序は重要です。同じ値を持っていても順序が異なる2つの配列は、等しくありません。
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] a = {1, 2, 3};
int[] b = {3, 2, 1};
System.out.println(Arrays.equals(a, b));
}
}オブジェクト配列を比較する
オブジェクト配列の場合、Arrays.equalsは各要素自身のequalsメソッドを使って要素を比較します。
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
String[] a = {"x", "y", "z"};
String[] b = {"x", "y", "z"};
System.out.println(Arrays.equals(a, b));
}
}読みやすい出力のためのtoString
配列を直接出力すると、クラス名とハッシュを表す[I@1b6d3586のような内容が表示されます。Arrays.toStringを使うと、読みやすい[1, 2, 3]形式で出力できます。
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] nums = {1, 2, 3};
System.out.println(nums);
System.out.println(Arrays.toString(nums));
}
}ネストした配列:deepEquals
配列の配列では、通常のequalsは各行の外側の参照だけを確認します。ネストした内容を比較するにはArrays.deepEqualsを使ってください。
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[][] a = {{1, 2}, {3, 4}};
int[][] b = {{1, 2}, {3, 4}};
System.out.println(Arrays.equals(a, b));
System.out.println(Arrays.deepEquals(a, b));
}
}ネストした配列:deepToString
同様に、Arrays.deepToStringを使うとネストした配列を明確に出力できます。一方、通常のtoStringでは内側の参照が表示されます。
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[][] grid = {{1, 2}, {3, 4}};
System.out.println(Arrays.toString(grid));
System.out.println(Arrays.deepToString(grid));
}
}配列のhashCode
内容に基づくハッシュが必要な場合は、Arrays.hashCodeを使ってください。ネストした配列にはArrays.deepHashCodeを使います。これらはArrays.equalsと整合する結果になります。
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(Arrays.hashCode(a) == Arrays.hashCode(b));
}
}ソート後に比較する
順序に関係なく、2つの配列に同じ値の集合が含まれているか確認するには、両方のコピーをソートしてからArrays.equalsで比較します。
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] a = {3, 1, 2};
int[] b = {2, 3, 1};
int[] ca = Arrays.copyOf(a, a.length);
int[] cb = Arrays.copyOf(b, b.length);
Arrays.sort(ca);
Arrays.sort(cb);
System.out.println(Arrays.equals(ca, cb));
}
}簡単なログ出力
デバッグ中は、出力文の中で配列をArrays.toStringに渡してください。意味の分かりにくい参照ではなく、実際の値を読めるようになります。
理解度チェック
配列の比較についての理解度を確認しましょう。
まとめ
配列の比較と出力を学びました。
==は参照を比較します。内容の等価性を調べるにはArrays.equalsを使います。- 順序と長さの両方が重要です。
Arrays.toStringは読みやすい出力を生成し、deepToStringはネストにも対応します。deepEqualsはネストした配列を比較します。
よくある質問
「Arrays.equals と toString」レッスンは無料ですか?
はい。「Arrays.equals と toString」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全4レッスンが含まれています。
「Arrays.equals と toString」で何を学びますか?
配列を比較して出力します。 ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Java Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「Arrays.equals と toString」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJava Academyレッスンでコードを書いて実行できますか?
はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Arrays.sortとソート
- Arrays.binarySearch
- Arrays.fillとcopyOf
- Arrays.equals と toString