Java の配列と ArrayList

JavaJavaBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Java における 2 つの基本的なデータ構造である配列と ArrayList について学びます。これらの構造は、多くのプログラミングタスクにとって重要なデータのコレクションを格納して操作するために役立ちます。まずは基本的な配列から始め、次により柔軟な ArrayList に移ります。この実験が終わるとき、Java で配列と ArrayList の両方を作成、操作して利用できるようになります。

以下の内容を扱います。

  1. 配列の作成と使用
  2. 配列要素のアクセスと変更
  3. ArrayList の紹介
  4. ArrayList への要素の追加、削除、アクセス
  5. 配列と ArrayList の間の変換

さあ、データの整理を始めましょう!


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java/BasicSyntaxGroup -.-> java/data_types("Data Types") java/BasicSyntaxGroup -.-> java/variables("Variables") java/DataStructuresGroup -.-> java/arrays("Arrays") java/DataStructuresGroup -.-> java/arrays_methods("Arrays Methods") java/DataStructuresGroup -.-> java/collections_methods("Collections Methods") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/arraylist("ArrayList") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/generics("Generics") subgraph Lab Skills java/data_types -.-> lab-413820{{"Java の配列と ArrayList"}} java/variables -.-> lab-413820{{"Java の配列と ArrayList"}} java/arrays -.-> lab-413820{{"Java の配列と ArrayList"}} java/arrays_methods -.-> lab-413820{{"Java の配列と ArrayList"}} java/collections_methods -.-> lab-413820{{"Java の配列と ArrayList"}} java/arraylist -.-> lab-413820{{"Java の配列と ArrayList"}} java/generics -.-> lab-413820{{"Java の配列と ArrayList"}} end

配列の作成と使用

配列は、Java における基本的なデータ構造であり、同じ型の複数の要素を格納することができます。配列を、1 つの特定の型の 1 つのアイテムを格納できる箱の列のように考えてください。

  1. プロジェクトディレクトリ内の ArrayDemo.java というファイルを開きましょう。

    public class ArrayDemo {
        public static void main(String[] args) {
            // ここにコードを追加します
        }
    }

    これが、私たちの Java プログラムの基本構造です。main メソッドは、プログラムが実行を開始する場所です。

  2. 次に、整数型の配列を宣言して初期化しましょう。main メソッドの中に次の行を追加します:

    int[] numbers = {1, 2, 3, 4, 5};

    この行は、numbers という名前の整数型の配列を作成し、1、2、3、4、5 の値で初期化します。角括弧 [] は、Java に numbers が配列であることを示します。

  3. 配列の要素を出力しましょう。配列宣言の後にこれらの行を追加します:

    System.out.println("The elements of the array are:");
    for (int i = 0; i < numbers.length; i++) {
        System.out.println("Element at index " + i + ": " + numbers[i]);
    }

    このコードは、for ループを使用して配列を反復処理します。numbers.length は配列のサイズを与え、numbers[i] はインデックス i の要素にアクセスします。

Java array elements output
  1. ファイルを保存し、次にプログラムをコンパイルして実行します:

    javac ~/project/ArrayDemo.java
    java -cp ~/project ArrayDemo

    次のような出力が表示されるはずです:

    The elements of the array are:
    Element at index 0: 1
    Element at index 1: 2
    Element at index 2: 3
    Element at index 3: 4
    Element at index 4: 5
  2. 次に、配列内のすべての要素の合計を計算しましょう。前のループの後にこのコードを追加します:

    int sum = 0;
    for (int number : numbers) {
        sum += number;
    }
    System.out.println("The sum of the elements is: " + sum);

    このコードは、拡張 for ループ(for-each ループとも呼ばれます)を使用して配列を反復処理します。インデックスが必要ない場合、すべての要素を処理する簡単な方法です。

  3. 最後に、配列内の最大値を見つけましょう。このコードを追加します:

    int max = numbers[0];
    for (int i = 1; i < numbers.length; i++) {
        if (numbers[i] > max) {
            max = numbers[i];
        }
    }
    System.out.println("The maximum value in the array is: " + max);

    このコードは、最初に最初の要素が最大値であると仮定し、その後、各要素を現在の最大値と比較し、より大きな値が見つかった場合に最大値を更新します。

  4. 再度、ファイルを保存し、コンパイルして実行します。追加の出力が表示されるはずです:

    The sum of the elements is: 15
    The maximum value in the array is: 5
Java array output example
  1. Java の配列はサイズが固定されていますが、要素を変更することはできます。要素を変更して、変更された配列を出力しましょう。main メソッドの末尾にこのコードを追加します:

    numbers[2] = 10;
    System.out.println("\nAfter modifying the third element:");
    for (int number : numbers) {
        System.out.print(number + " ");
    }
    System.out.println();

    これは、3 番目の要素(インデックス 2)の値を 10 に変更し、その後、変更された配列を出力します。

  2. 再度、ファイルを保存し、コンパイルして実行します。追加の出力が表示されるはずです:

    After modifying the third element:
    1 2 10 4 5

おめでとうございます!これで、配列を作成し、その要素にアクセスし、その値を使って計算を行い、要素を変更しました。Java の配列はサイズが固定されており、つまり、配列を作成すると、その長さを変更することはできません。ただし、要素の値を変更することはできます。

ArrayList の紹介

これまで配列を扱ってきましたので、次は ArrayList について紹介しましょう。ArrayList は Java Collections Framework の一部であり、オブジェクトのリストを扱うためのより柔軟な方法を提供します。配列とは異なり、ArrayList は動的にサイズを増やしたり減らしたりすることができます。

  1. プロジェクトディレクトリ内の ArrayListDemo.java というファイルを開きましょう。

    import java.util.ArrayList;
    
    public class ArrayListDemo {
        public static void main(String[] args) {
            // ここにコードを追加します
        }
    }

    上部の import 文に注目してください。これは、プログラムで ArrayList クラスを使用したい旨を Java に伝えます。

  2. 次に、文字列の ArrayList を作成しましょう。main メソッドの中にこの行を追加します:

    ArrayList<String> fruits = new ArrayList<>();

    これは、文字列を保持できる空の ArrayList を作成します。<String> の部分は「ジェネリック」と呼ばれ、ArrayList に含まれる要素の型を指定します。

  3. ArrayList にいくつかの要素を追加しましょう。これらの行を追加します:

    fruits.add("Apple");
    fruits.add("Banana");
    fruits.add("Cherry");

    add() メソッドは、要素をリストの末尾に追加します。

  4. 次に、ArrayList を出力しましょう。このコードを追加します:

    System.out.println("Fruits in the list:");
    for (String fruit : fruits) {
        System.out.println(fruit);
    }

    これは、配列と同じように、拡張 for ループを使用して ArrayList を反復処理します。

    ヒント:いつでもプログラムをコンパイルして実行して出力を見ることができます。または、さらにコードを追加して最後にすべてを実行することもできます。

  5. ArrayList にはたくさんの便利なメソッドがあります。いくつか試してみましょう。このコードを追加します:

    System.out.println("\nNumber of fruits: " + fruits.size());
    System.out.println("The second fruit is: " + fruits.get(1));

    size() は ArrayList 内の要素数を返し、get(index) は指定されたインデックスの要素を取得します。

  6. set() メソッドを使用して、ArrayList 内の要素を置き換えることもできます。このコードを追加します:

    // 変更前: [Apple, Banana, Cherry]
    fruits.set(1, "Blueberry");    // "Banana" を "Blueberry" に置き換える
    System.out.println("\nAfter replacing the second fruit:");
    System.out.println(fruits);     // [Apple, Blueberry, Cherry]

    set(index, element) は、指定されたインデックスの要素を新しい要素で置き換えます。ArrayList のサイズは変わりません。

  7. 配列とは異なり、ArrayList は add(index, element) メソッドを使用して任意の位置に要素を挿入することができます。これは、先ほど見た set() とは異なります。add() がどのように機能するか見てみましょう:

    // 変更前: [Apple, Blueberry, Cherry]
    fruits.add(1, "Blackberry");
    System.out.println("\nAfter inserting Blackberry at index 1:");
    System.out.println(fruits);
    // 変更後: [Apple, Blackberry, Blueberry, Cherry]

    何が起こったか理解しましょう:

    • add(1, "Blackberry") は、インデックス 1 に "Blackberry" を挿入します
    • インデックス 1 以降の既存の要素(Blueberry、Cherry)は自動的に 1 つ右にシフトされます
    • ArrayList のサイズは 1 増えます
    • これは、既存の要素を置き換えてシフトやサイズを変更しない set() とは異なります

    違いを視覚的に理解するために:

    // add(index, element) を使用 - 挿入してシフト
    fruits.add(1, "Blackberry");    // [Apple, Blackberry, Blueberry, Cherry]
    
    // set(index, element) を使用 - 置き換えてシフトしない
    fruits.set(1, "Blackberry");    // [Apple, Blackberry, Cherry]
  8. ArrayList から要素を削除することもできます。このコードを追加します:

    fruits.remove("Cherry");
    System.out.println("\nAfter removing Cherry:");
    System.out.println(fruits);

    これは、ArrayList から最初に見つかった "Cherry" を削除します。要素が削除されると、その後の要素は左にシフトされて空きを埋めます。

  9. 最後に、特定の要素が ArrayList に含まれているかどうかを確認しましょう:

    System.out.println("\nDoes the list contain Apple? " + fruits.contains("Apple"));
    System.out.println("Does the list contain Cherry? " + fruits.contains("Cherry"));

    contains() メソッドは、ArrayList に特定の要素が含まれているかどうかを確認し、ブール値を返します。

  10. ファイルを保存し、次にプログラムをコンパイルして実行します:

    javac ~/project/ArrayListDemo.java
    java -cp ~/project ArrayListDemo

    次のような出力が表示されるはずです:

    Fruits in the list:
    Apple
    Banana
    Cherry
    
    Number of fruits: 3
    The second fruit is: Banana
    
    After replacing the second fruit:
    [Apple, Blueberry, Cherry]
    
    After inserting Blackberry at index 1:
    [Apple, Blackberry, Blueberry, Cherry]
    
    After removing Cherry:
    [Apple, Blackberry, Blueberry]
    
    Does the list contain Apple? true
    Does the list contain Cherry? false

おめでとうございます!これで、ArrayList を作成し、要素を追加および削除し、インデックスで要素にアクセスし、さまざまな ArrayList メソッドを使用しました。要素を挿入してシフトする add() と、要素を置き換える set() のような操作の重要な違いを学びました。ArrayList は配列よりも柔軟性が高く、必要に応じてサイズを増やしたり減らしたりできます。事前に処理する要素の数がわからない場合には非常に便利です。

配列と ArrayList の間の変換

時々、配列と ArrayList の間で変換する必要がある場合があります。Java はこれを行うための便利なメソッドを提供しています。配列を ArrayList に変換する方法と、その逆の方法を見ていきましょう。

  1. プロジェクトディレクトリ内の ConversionDemo.java というファイルを開きましょう。

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    public class ConversionDemo {
        public static void main(String[] args) {
            // ここにコードを追加します
        }
    }

    上部の import 文に注目してください。変換に必要なクラスをインポートしています。

  2. まずは配列を ArrayList に変換しましょう。main メソッドの中にこのコードを追加します:

    String[] colorArray = {"Red", "Green", "Blue"};
    List<String> colorList = Arrays.asList(colorArray);
    
    System.out.println("Array converted to ArrayList:");
    System.out.println(colorList);

    Arrays.asList() は配列を List に変換します。このとき、元の配列をバックアップとした固定サイズのリストが作成されます。

  3. ArrayList を変更して、元の配列に何が起こるか見てみましょう。このコードを追加します:

    colorList.set(1, "Yellow");
    
    System.out.println("\nAfter modifying the ArrayList:");
    System.out.println(colorList);
    System.out.println("Original array after ArrayList modification:");
    System.out.println(Arrays.toString(colorArray));

    Arrays.toString() は配列を出力するための便利なメソッドです。

  4. 次に、ArrayList を配列に変換しましょう。このコードを追加します:

    ArrayList<Integer> numberList = new ArrayList<>();
    numberList.add(1);
    numberList.add(2);
    numberList.add(3);
    
    Integer[] numberArray = numberList.toArray(new Integer[0]);
    
    System.out.println("\nArrayList converted to array:");
    System.out.println(Arrays.toString(numberArray));

    ArrayList の toArray() メソッドを使用して、それを配列に変換します。new Integer[0] を引数として渡します。これは、作成する配列の型とサイズのヒントとして機能します。

  5. 最後に、配列を変更して、ArrayList に影響があるかどうか見てみましょう。このコードを追加します:

    numberArray[0] = 100;
    System.out.println("\nAfter modifying the array:");
    System.out.println("Array: " + Arrays.toString(numberArray));
    System.out.println("ArrayList: " + numberList);
  6. ファイルを保存し、次にプログラムをコンパイルして実行します:

    javac ~/project/ConversionDemo.java
    java -cp ~/project ConversionDemo

    次のような出力が表示されるはずです:

    Array converted to ArrayList:
    [Red, Green, Blue]
    
    After modifying the ArrayList:
    [Red, Yellow, Blue]
    Original array after ArrayList modification:
    [Red, Yellow, Blue]
    
    ArrayList converted to array:
    [1, 2, 3]
    
    After modifying the array:
    Array: [100, 2, 3]
    ArrayList: [1, 2, 3]

このデモは、配列と ArrayList がどのように相互に変換できるかを示しています。動作の違いに注意することが重要です:

  • Arrays.asList() を使用して配列を List に変換すると、結果の List は元の配列をバックアップとしています。これは、List の変更が配列に反映され、逆も同じであることを意味します。
  • toArray() を使用して ArrayList を配列に変換すると、ArrayList と独立した新しい配列が作成されます。この新しい配列の変更は、元の ArrayList に影響を与えません。

Java で異なるコレクション型を扱う際、特に API やライブラリとのインターフェイスで一方の型が好まれる場合には、これらの変換とその動作を理解することが重要です。

まとめ

この実験では、Java における 2 つの基本的なデータ構造である配列と ArrayList について学びました。学んだことを振り返りましょう:

  1. 配列:

    • 構文 int[] numbers = {1, 2, 3, 4, 5}; を使用して配列を作成し、初期化しました。
    • numbers[0] のようなインデックス表記を使って配列要素にアクセスする方法を学びました。
    • 従来の for ループと拡張 for ループの両方を使って配列を反復処理しました。
    • 配列要素を使って合計や最大値を求めるなどの計算を行いました。
    • 配列は固定サイズですが、要素を変更することができます。
  2. ArrayList:

    • ArrayList<String> fruits = new ArrayList<>(); を使って ArrayList を作成しました。
    • add() で要素を追加し、remove() で要素を削除し、get() で要素にアクセスする方法を学びました。
    • size()set()contains() などのメソッドを使って ArrayList を操作しました。
    • ArrayList は動的にサイズを増やしたり減らしたりでき、配列よりも柔軟性が高いことがわかりました。
  3. 配列と ArrayList の間の変換:

    • Arrays.asList() を使って配列を ArrayList に変換しました。
    • toArray() メソッドを使って ArrayList を配列に変換しました。
    • 変換されたコレクションを変更する際の異なる動作を観察しました。

配列と ArrayList は Java プログラミングにおける重要なツールです。配列は固定数の要素を扱うのに適しており、メモリ使用量の面でより効率的です。一方、ArrayList はより柔軟性があり、コレクションを操作するための豊富なメソッドセットを提供します。

Java の学習を続けるにつれて、配列と ArrayList の両方を頻繁に使うことになるでしょう。それらの選択は多くの場合、特定のニーズに依存します。要素数が正確にわかっている場合、配列が好ましいかもしれません。要素数が動的に増減する必要がある場合、または ArrayList が提供する追加のメソッドが必要な場合、ArrayList がより良い選択になります。