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

Javaで2つのリスト間の欠落要素と追加要素を見つける方法

2つのリストを比較し、片方に存在しない「欠落している値」と「新しく追加された値」を検出することは、データ同期や差分チェックなどの処理でよく使われるテクニックです。ここでは、containsメソッドを活用して、2つのリスト間の差分を簡単に見つけるJavaプログラムを紹介します。

サンプルコード

import java.util.*;
public class Demo{
   public static void main(String[] args){
      List my_list_1 = new ArrayList();
      List my_list_2 = new ArrayList();
      my_list_1.add(new Integer("101"));
      my_list_1.add(new Integer("90"));
      my_list_1.add(new Integer("34"));
      my_list_2.add(new Integer("34"));
      my_list_2.add(new Integer("67"));
      my_list_2.add(new Integer("90"));
      for(int i = 0; i < my_list_1.size(); i++){
         if (my_list_2.contains(my_list_1.get(i)))
         continue;
            else
         System.out.println("The missing element is : "+my_list_1.get(i));
      }
      for(int j=0; j<my_list_2.size();j++){
         if (my_list_1.contains(my_list_2.get(j)))
         continue;
            else
         System.out.println("The new element in the list is : "+my_list_2.get(j));
      }
   }
}

実行結果

The missing element is : 101
The new element in the list is : 67

プログラムの解説

まず、Demoというクラス内にmainメソッドを定義し、その中で2つのArrayList(my_list_1my_list_2)を作成します。それぞれのリストには、addメソッドを使って複数の整数値を追加しています。

次に、1つ目のforループでmy_list_1の要素を順番に取り出し、containsメソッドを使ってその要素がmy_list_2に存在するかどうかを判定します。存在する場合はcontinueで処理をスキップし、存在しない場合は「欠落している要素」としてコンソールに出力します。

同様に、2つ目のforループではmy_list_2の要素を順に調べ、my_list_1に含まれていない要素、つまり「新しく追加された要素」を検出して表示します。

この例では、101my_list_2に存在しないため欠落要素として出力され、逆に67my_list_1に存在しないため追加要素として出力されます。

補足:よりモダンな書き方

なお、上記のコードは古いスタイルの記述です。現在のJavaでは、オートボクシングによりnew Integer()は非推奨となっており、ジェネリクスを使った次のような書き方が推奨されます。

List<Integer> my_list_1 = new ArrayList<>(Arrays.asList(101, 90, 34));
List<Integer> my_list_2 = new ArrayList<>(Arrays.asList(34, 67, 90));

また、Java 8以降であればStream APIのfilterforEachを組み合わせることで、さらに簡潔に差分抽出処理を記述できます。用途やプロジェクトのコーディング規約に合わせて、最適な方法を選択するとよいでしょう。

  1. 直方体の表面積と体積を求めるJavaプログラム

    この記事では、直方体の表面積と体積を計算するJavaプログラムの書き方について詳しく解説します。直方体とは、6つの長方形の面で構成される三次元の立体のことであり、各辺の長さ・幅・高さがそれぞれ異なる場合があります。立方体と直方体の違いは、立方体では長さ・高さ・幅がすべて等しいのに対し、直方体ではこれら3つの寸法が必ずしも同じではないという点です。直方体の表面積と体積の計算式直方体の表面積は、次の式で求めることができます。2*(縦 × 横 + 横 × 高さ + 高さ × 縦)直方体の体積は、次の式で求めることができます。縦 × 横 × 高さ以下に具体的な計算例を示します。入力Length = 6

  2. 【Python】2つのリスト間の欠落している値と追加されている値を見つける方法

    集合論において、ある集合Aの「補集合」とは、Aに含まれない要素を指します。また、集合Bに対するAの「相対補集合」は、集合AとBの「差(difference)」とも呼ばれます。本記事では、この原理を応用し、Pythonで2つのリストを比較することで、互いに欠落している要素と余分な要素を効率よく見つける方法を解説します。Pythonのset型には差分を求めるためのdifference()メソッドが標準で用意されており、これを使うと非常にシンプルに実装できます。 アルゴリズム ユーザー入力から2つのリストAとBを作成します。 AとBをそれぞれセット(set型)に変換します。 1つ目のリストに欠落し