Java中級

中級 Javaで学ぶアルゴリズム|練習問題編

導入

アルゴリズムの理解は、実務において効率的なプログラムを構築するための基盤となります。本記事では、特定のケーススタディを通じて、アルゴリズムの実践的な適用方法を探ります。具体的には、データの集合から特定の条件を満たす要素を効率的に検索する問題に焦点を当てます。このアプローチは、フィルタリングや検索機能を必要とする多くのアプリケーションで役立ちます。

教科書レベルの解説(アルゴリズム)

重要な概念の整理

データの検索は、プログラミングにおいて頻繁に直面する課題です。特に、大規模なデータセットから特定の情報を抽出する際、効率的なアルゴリズムの選択が性能に大きな影響を与えます。ここでは、リストからの条件に基づく要素の抽出に関連するアルゴリズムを取り上げます。このプロセスでは、リニアサーチやバイナリサーチの技術を応用することが考えられますが、データの性質によって最適な方法は異なります。

コード例(Java)


import java.util.ArrayList;
import java.util.List;

public class FilterExample {
    public static List filterEvenNumbers(List numbers) {
        List evenNumbers = new ArrayList<>();
        for (Integer number : numbers) {
            if (number % 2 == 0) {
                evenNumbers.add(number);
            }
        }
        return evenNumbers;
    }

    public static void main(String[] args) {
        List numbers = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        List evenNumbers = filterEvenNumbers(numbers);
        System.out.println(evenNumbers);
    }
}

コードの行ごとの解説

  1. import java.util.ArrayList; – ArrayListクラスをインポートし、可変長のリストを扱えるようにします。
  2. import java.util.List; – Listインターフェースをインポートし、リストの操作を行います。
  3. public class FilterExample { – フィルタリングの例を示すクラスを定義します。
  4. public static List filterEvenNumbers(List numbers) { – 偶数をフィルタリングするメソッドを宣言します。
  5. List evenNumbers = new ArrayList<>(); – 偶数を格納するためのリストを初期化します。
  6. for (Integer number : numbers) { – 引数として受け取ったリストの各要素をループ処理します。
  7. if (number % 2 == 0) { – 偶数かどうかを判定します。
  8. evenNumbers.add(number); – 偶数であれば、evenNumbersリストに追加します。
  9. return evenNumbers; – フィルタリングされた偶数のリストを返します。
  10. public static void main(String[] args) { – プログラムのエントリーポイントを定義します。
  11. List numbers = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); – テストデータとして1から10までの整数リストを作成します。
  12. System.out.println(evenNumbers); – フィルタリングされた偶数のリストを出力します。

練習問題編

以下の練習問題に挑戦し、アルゴリズムの理解を深めてください。

  1. 問題1: リスト内のすべての奇数をフィルタリングするメソッドを実装してください。
  2. 問題2: 与えられた整数のリストから、指定された閾値より大きい数値をフィルタリングするメソッドを作成してください。
  3. 問題3: リスト内の重複を排除するメソッドを実装し、結果を返してください。
  4. 問題4: 文字列のリストから、特定の文字を含む文字列をフィルタリングするメソッドを作成してください。
  5. 問題5: リスト内の要素を逆順に並べ替えるメソッドを実装してください。

模範解答と解説

問題1: 奇数をフィルタリングするメソッドの実装例。


public static List filterOddNumbers(List numbers) {
    List oddNumbers = new ArrayList<>();
    for (Integer number : numbers) {
        if (number % 2 != 0) {
            oddNumbers.add(number);
        }
    }
    return oddNumbers;
}

問題2: 閾値より大きい数値をフィルタリングするメソッドの実装例。


public static List filterGreaterThan(List numbers, int threshold) {
    List filteredNumbers = new ArrayList<>();
    for (Integer number : numbers) {
        if (number > threshold) {
            filteredNumbers.add(number);
        }
    }
    return filteredNumbers;
}

問題3: 重複を排除するメソッドの実装例。


public static List removeDuplicates(List numbers) {
    return new ArrayList<>(new HashSet<>(numbers));
}

問題4: 特定の文字を含む文字列をフィルタリングするメソッドの実装例。


public static List filterStringsContaining(List strings, String character) {
    List filteredStrings = new ArrayList<>();
    for (String str : strings) {
        if (str.contains(character)) {
            filteredStrings.add(str);
        }
    }
    return filteredStrings;
}

問題5: 要素を逆順に並べ替えるメソッドの実装例。


public static List reverseList(List numbers) {
    List reversed = new ArrayList<>(numbers);
    Collections.reverse(reversed);
    return reversed;
}

まとめ

  • データのフィルタリングは、実務での効率的なプログラムにおいて重要なスキルです。
  • 異なる条件に基づくフィルタリングメソッドを実装することで、アルゴリズムの理解を深めることができます。
  • 練習問題を通じて、実際の業務に応じたアルゴリズムの適用方法を習得しましょう。