DEV Community

TANIAOKA, Akihiro
TANIAOKA, Akihiro

Posted on

9章16

このJavaのコードは、2つの文字列配列abを比較して、その結果をコンソールに出力するものです。コメントアウトを追加して、どのように機能しているのかを説明します。

import java.util.Arrays; // Arraysクラスをインポート

public class Main {
    public static void main(String[] args) {
        String[] a = {"B", "A"}; // 文字列配列aを宣言し、"B"と"A"の値で初期化
        String[] b = {"A", "B"}; // 文字列配列bを宣言し、"A"と"B"の値で初期化

        // Arraysクラスのcompareメソッドを使用して、配列aとbを辞書順で比較する
        // compareメソッドは、最初に異なる要素が見つかった場所で比較を行い、
        // aがbより小さい場合は負の数、等しい場合は0、大きい場合は正の数を返す。
        System.out.println(Arrays.compare(a, b)); 
    }
}
Enter fullscreen mode Exit fullscreen mode

このコードによって出力されるのは、Arrays.compare(a, b)メソッドの結果です。このメソッドは2つの配列を比較し、最初に見つかった異なる要素に基づいて、以下の値のいずれかを返します。

  • 配列aが配列bよりも辞書順で先に来る場合(小さい場合)は負の値
  • 配列が等しい場合は0
  • 配列aが配列bよりも辞書順で後に来る場合(大きい場合)は正の値

配列aには{"B", "A"}が、配列bには{"A", "B"}が入っています。辞書順で比較すると、"A"は"B"よりも前に来ます。したがって、a[0]の"B"はb[0]の"A"より辞書順で後に来るため、Arrays.compare(a, b)は正の値を返します。

このコードの答えは、実際には1です。これは、配列aが配列bよりも辞書順で後に来ることを意味します。それぞれの配列の最初の要素を比較した時点で決定されるため、配列の残りの要素は比較には影響しません。

 追記

JavaのArrays.compare()メソッドは、二つの配列を引数として受け取り、配列の要素を一つずつ順番に比較していきます。このメソッドは、二つの配列が等しいか、またはどちらが「辞書順」で先に来るか(小さいか)を決定するために使用されます。

ここで言う「辞書順」とは、文字列が辞書に載っている順番、つまりアルファベット順に並べられている順を指します。例えば、"Apple"は"Banana"より辞書順で先(小さい)とされます。

Arrays.compare()メソッドは、次のルールに従って結果を返します:

  • 二つの配列が完全に等しい場合、つまり全ての対応する要素が同じであれば、0を返します。
  • 配列aが配列bよりも辞書順で先(小さい)に来る場合、最初に異なる要素が見つかったインデックスで、負の整数を返します。
  • 配列aが配列bよりも辞書順で後(大きい)に来る場合、最初に異なる要素が見つかったインデックスで、正の整数を返します。

配列abで最初に異なる要素はそれぞれの配列の最初の要素です。配列aの最初の要素は"B"で、配列bの最初の要素は"A"です。"A"は"B"より辞書順で前(小さい)なので、Arrays.compare()は正の値を返します。実際には、このメソッドは比較して異なる最初の要素に基づいた比較結果を返すので、配列のサイズが同じで、最初に異なる要素が見つかった場合には通常 1 または -1 を返します。

コードの文脈では、"B"が"A"より辞書順で後ろにくるため、結果は 1 となります。これがこのメソッドが数字を返す理由です。数字によって、二つの配列の大小関係が表されます。

Top comments (0)