Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaでリストの要素を回転させるプログラムの書き方を解説


はじめに

この記事では、Javaでリスト(List)の要素を回転させる方法を解説します。ListはCollectionインターフェースを継承しており、順序付けられた要素列を格納するコレクションの振る舞いを定義します。Collectionフレームワークは、オブジェクトのグループを格納・操作するための統一的なアーキテクチャを提供しており、検索・ソート・挿入・更新・削除といったデータに対するあらゆる操作を実現できます。

リストの「回転」とは、要素の並びを環状にずらす操作のことです。ここでは、各要素を1つずつ左側にずらし、先頭だった要素を末尾へ移動させる「1回転」を行います。

入力値:

入力リスト:[100, 150, 200, 250, 300]

期待される出力:

1回転後のリスト:[150, 200, 250, 300, 100]

アルゴリズム

  1. 処理を開始する。
  2. リスト(input_list)を宣言する。
  3. リストに値を追加する。
  4. 先頭の要素を取得し、一時変数tempに退避する。
  5. 2番目以降の要素を、それぞれ1つ前の位置へ移動する。
  6. tempの値をリストの末尾に設定する。
  7. 結果を表示する。
  8. 処理を終了する。

例1:mainメソッド内にすべての処理を記述する場合

まず、すべての操作をmainメソッド内にまとめて記述するシンプルな例から見ていきましょう。

import java.util.*;
public class Demo {
   public static void main(String[] args) {
      List<Integer> input_list = new ArrayList<>();
      input_list.add(100);
      input_list.add(150);
      input_list.add(200);
      input_list.add(250);
      input_list.add(300);
      System.out.println("定義されたリスト:" + Arrays.toString(input_list.toArray()));

      // 先頭の要素を退避し、残りの要素を1つずつ前にずらす
      int temp = input_list.get(0);
      for (int i = 0; i < input_list.size() - 1; i++) {
         input_list.set(i, input_list.get(i + 1));
      }
      input_list.set(input_list.size() - 1, temp);

      System.out.println("1回転後のリスト:" + Arrays.toString(input_list.toArray()));
   }
}

出力

定義されたリスト:[100, 150, 200, 250, 300]
1回転後のリスト:[150, 200, 250, 300, 100]

例2:オブジェクト指向スタイルでメソッドに分割する場合

次に、回転処理を独立したメソッドとしてカプセル化し、オブジェクト指向らしい構成に書き直した例を示します。処理の再利用性が高まり、コードの意図も明確になります。

import java.util.*;
public class Demo {
   static void rotate(List<Integer> input_list) {
      int temp = input_list.get(0);
      for (int i = 0; i < input_list.size() - 1; i++) {
         input_list.set(i, input_list.get(i + 1));
      }
      input_list.set(input_list.size() - 1, temp);
      System.out.println("\n1回転後のリスト:" + Arrays.toString(input_list.toArray()));
   }

   public static void main(String[] args) {
      List<Integer> input_list = new ArrayList<>();
      input_list.add(100);
      input_list.add(150);
      input_list.add(200);
      input_list.add(250);
      input_list.add(300);
      System.out.println("定義されたリスト:" + Arrays.toString(input_list.toArray()));
      rotate(input_list);
   }
}

出力

定義されたリスト:[100, 150, 200, 250, 300]

1回転後のリスト:[150, 200, 250, 300, 100]

補足:Collections.rotateメソッドを使う方法

実は、Java標準ライブラリのCollections.rotateメソッドを使えば、回転処理を1行で実現できます。第2引数に負の値を指定すると左回転、正の値を指定すると右回転になります。

import java.util.*;
public class Demo {
   public static void main(String[] args) {
      List<Integer> input_list = new ArrayList<>(Arrays.asList(100, 150, 200, 250, 300));
      Collections.rotate(input_list, -1); // 左に1回転
      System.out.println("1回転後のリスト:" + input_list);
   }
}

このコードも同じく [150, 200, 250, 300, 100] を出力します。自前でループを書く必要がなくバグも起きにくいため、実務ではこちらの方法が推奨されます。


  1. Javaでリストから重複要素を削除する2つの方法|LinkedHashSetとStream APIのdistinct()

    JavaのList(リスト)から重複する要素を削除したい場面は少なくありません。本記事では、代表的な2つの手法――LinkedHashSetを利用する方法と、Stream APIのdistinct()メソッドを利用する方法――を、サンプルコードと実行結果つきでわかりやすく解説します。 方法1: LinkedHashSetを使って重複を削除する LinkedHashSetは、「重複した要素を許さない」かつ「挿入された順序を保持する」という特徴を持つコレクションです。そのため、ListをLinkedHashSetに変換するだけで、元の並び順を保ったまま重複要素を簡単に取り除くことができます。 サン

  2. Pythonでリスト(配列)の要素を左に回転させる方法を徹底解説

    Pythonでは、リスト(配列)の要素を左に回転させたい場合、リストを反復処理しながら、指定した回数だけ要素の位置をずらしていくことで実現できます。 本記事では、for文を使った基本的な左回転の実装方法を、サンプルコードと実行結果とともにわかりやすく解説します。さらに、スライスを使ったより簡潔な書き方もあわせてご紹介します。 サンプルコード my_list = [11, 12, 23, 34, 65] n = 3 print(元のリスト:) for i in range(0, len(my_list)): print(my_list[i]) for i in range(0, n