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

JavaのCollections.replaceAll()メソッドとList.replaceAll()メソッドの違いを解説


Collections.replaceAll()メソッドとは

java.util.CollectionsクラスのreplaceAll()メソッドは、Listオブジェクトと、置換前の値(旧値)・置換後の値(新値)を表す2つの引数を受け取ります。このメソッドを呼び出すと、リスト内に存在する旧値がすべて新値に一括して置き換えられます。

使用例

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ReplaceAllExample {
   public static void main(String args[]) {
      List<String> list = new ArrayList<String>();
      list.add("Java");
      list.add("Java Script");
      list.add("HBase");
      list.add("CoffeeScript");
      list.add("TypeScript");
      System.out.println("Contents of list: "+list);
      Collections.replaceAll(list, "Java", "JAVA");
      System.out.print("Contents of list after replace operation: \n"+list);
   }
}

実行結果

Contents of list: [Java, Java Script, HBase, CoffeeScript, TypeScript]
Contents of list after replace operation:
[JAVA, Java Script, HBase, CoffeeScript, TypeScript]

上記の例では、「Java」という要素だけが「JAVA」に置き換えられ、それ以外の要素は元のまま保持されていることがわかります。つまり、特定の値だけを対象に置換を行いたい場合に適したメソッドです。

List.replaceAll()メソッドとは

一方、java.util.ListインターフェースのreplaceAll()メソッド(Java 8以降で利用可能)は、特定の処理を表すUnaryOperatorオブジェクトを引数として受け取ります。このメソッドは、現在のリストのすべての要素に対して指定された操作を実行し、既存の値をその処理結果で置き換えます。

使用例

import java.util.ArrayList;
import java.util.function.UnaryOperator;
class Op implements UnaryOperator<String> {
   public String apply(String str) {
      return str.toUpperCase();
   }
}
public class Test {
   public static void main(String[] args) throws CloneNotSupportedException {
      ArrayList<String> list = new ArrayList<>();
      list.add("Java");
      list.add("JavaScript");
      list.add("CoffeeScript");
      list.add("HBase");
      list.add("OpenNLP");
      System.out.println("Contents of the list: "+list);
      list.replaceAll(new Op());
      System.out.println("Contents of the list after replace operation: \n"+list);
   }
}

実行結果

Contents of the list: [Java, JavaScript, CoffeeScript, HBase, OpenNLP]
Contents of the list after replace operation:
[JAVA, JAVASCRIPT, COFFEESCRIPT, HBASE, OPENNLP]

この例では、UnaryOperatorのapply()メソッド内で定義した「文字列を大文字に変換する」処理が、リスト内のすべての要素に適用されました。

両者の違いのまとめ

メソッド所属動作
Collections.replaceAll()Collectionsクラス指定した旧値に一致する要素のみを新値に置き換える
List.replaceAll()Listインターフェースすべての要素に対してUnaryOperatorの処理を適用し、結果で置き換える

用途に応じて使い分けることで、より効率的かつ可読性の高いコードを書くことができます。特定の値の置換にはCollections.replaceAll()を、全要素への一括変換にはList.replaceAll()を選択しましょう。


  1. Javaの抽象クラスと抽象メソッドの基本と実装例

    はい、Javaでは抽象クラスや抽象メソッドを簡単に作成することができます。本記事では、abstractキーワードを使った抽象クラスの定義方法と、その基本的な構造について具体例を交えて解説します。抽象クラスとは抽象クラス(abstract class)は、その名の通り「抽象的」な概念を表すためのクラスで、直接インスタンス化することはできません。共通の属性や振る舞いをサブクラスに継承させるための設計図として活用されます。抽象クラスを作成する方法は非常にシンプルで、クラス宣言時に class キーワードの前に abstract キーワードを付けるだけです。コード例/* ファイル名 : Employe

  2. Javaのメソッドオーバーロードと型昇格(型プロモーション)の基礎を徹底解説

    はじめにJavaでは、メソッドのオーバーロード(Overload)を利用することで、同じ名前のメソッドを複数定義し、異なる型や個数の引数に対して似たような処理を実行できます。さらに、引数の変数が互いに似た型である場合には、型昇格(Type Promotion)という仕組みが自動的に働きます。本記事では、これら2つの概念の関係性と、実際のコード例を通じてその動作を詳しく見ていきます。型昇格(Type Promotion)とは?型昇格とは、より小さい範囲の値を持つデータ型が、より大きい範囲のデータ型へ自動的に変換される仕組みです。たとえば、byte型の変数はint型の変数にそのまま代入できます。こ