【Java】removeAllを使って2つのリスト(List)で重複する要素を削除する!
2つのリストで重複する要素を削除する場合にはListクラスのremoveAllメソッドを使用します。
ListクラスのremoveAllメソッドは、List型に指定した要素をすべて削除します。
そのため、2つのリストを比較し、重複する要素を削除することができます。
今回はListクラスのremoveAllメソッドを使って以下の場合で2つのリスト(List)で重複する要素を削除します。
⚫︎ 重複する要素がある場合に重複する要素を削除する
⚫︎ 重複する要素がない場合に重複する要素を削除する
⚫︎ 重複する要素が複数ある場合に重複する要素を削除する
目次
removeAllメソッドとは
ListクラスのremoveAllメソッドは、List型に指定した要素をすべて削除するためのメソッドとなります。
removeAll似たメソッドとしてListクラスのremoveメソッドとclearがありますが、removeメソッドは「指定した1つの要素を削除」、clear()メソッドは「リスト内の要素を全て削除」という認識となります。
removeAllメソッドの書き方
removeAllメソッドの構文は下記となります。
1 |
list1.removeAll(list2); |
removeAllの()にlist2を指定することでremoveAllの前に指定したlist1と重複している要素を削除することができます。
また、removeAllメソッドは要素を1つ以上削除すると、trueを戻します。
2つのリストで重複する要素を削除するサンプルコード
2つのリストで重複する要素を削除するサンプルコードを紹介します。
リストに重複する要素がある場合
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
// 2つのリストで重複する要素を削除する import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) throws Exception { List<String> listA = new ArrayList<String>(); // リストに要素を追加 listA.add("あいうえお"); listA.add("かきくけこ"); listA.add("さしすせそ"); List<String> listB = new ArrayList<String>(); //リストに要素を追加 listB.add("かきくけこ"); listB.add("がぎぐげご"); listB.add("さしすせそ"); listB.add("ざじずぜぞ"); System.out.println("・削除前"); System.out.println(listA); System.out.println(listB); // listAの要素のうちlistBにもあるものを削除 boolean result = listA.removeAll(listB); System.out.println("・削除後"); System.out.println(listA); System.out.println(listB); System.out.println( result ? "削除された要素がある": "要素は削除されなかった"); } } |
出力結果
・削除前
[あいうえお, かきくけこ, さしすせそ]
[かきくけこ, がぎぐげご, さしすせそ, ざじずぜぞ]
・削除後
[あいうえお]
[かきくけこ, がぎぐげご, さしすせそ, ざじずぜぞ]
削除された要素がある
removeAllメソッドを使用して、重複した要素をlistAから削除しています。
また、削除したことからremoveAllはtrueを返しています。
リストに重複する要素がない場合
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
// 2つのリストで重複する要素を削除する import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) throws Exception { List<String> listA = new ArrayList<String>(); // リストに要素を追加 listA.add("あいうえお"); listA.add("かきくけこ"); listA.add("さしすせそ"); listA.add("たちつてと"); List<String> listB = new ArrayList<String>(); //リストに要素を追加 listB.add("がぎぐげご"); listB.add("ざじずぜぞ"); System.out.println("・削除前"); System.out.println(listA); System.out.println(listB); // listAの要素のうちlistBにもあるものを削除 boolean result = listA.removeAll(listB); System.out.println("・削除後"); System.out.println(listA); System.out.println(listB); System.out.println( result ? "削除された要素がある": "要素は削除されなかった"); } } |
出力結果
・削除前
[あいうえお, かきくけこ, さしすせそ, たちつてと]
[がぎぐげご, ざじずぜぞ]
・削除後
[あいうえお, かきくけこ, さしすせそ, たちつてと]
[がぎぐげご, ざじずぜぞ]
要素は削除されなかった
重複する要素がない為、removeAllメソッドはfalseを返します。
リストに重複する要素が複数ある場合
removeAllメソッドは重複する複数の同じ要素も全て削除することができます。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
// 2つのリストで重複する要素を削除する import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) throws Exception { List<String> listA = new ArrayList<String>(); // リストに要素を追加 listA.add("あいうえお"); listA.add("かきくけこ"); listA.add("さしすせそ"); listA.add("かきくけこ"); listA.add("さしすせそ"); List<String> listB = new ArrayList<String>(); //リストに要素を追加 listB.add("かきくけこ"); listB.add("がぎぐげご"); listB.add("さしすせそ"); listB.add("ざじずぜぞ"); System.out.println("・削除前"); System.out.println(listA); System.out.println(listB); // listAの要素のうちlistBにもあるものを削除 boolean result = listA.removeAll(listB); System.out.println("・削除後"); System.out.println(listA); System.out.println(listB); System.out.println( result ? "削除された要素がある": "要素は削除されなかった"); } } |
出力結果
・削除前
[あいうえお, かきくけこ, さしすせそ, かきくけこ, さしすせそ]
[かきくけこ, がぎぐげご, さしすせそ, ざじずぜぞ]
・削除後
[あいうえお]
[かきくけこ, がぎぐげご, さしすせそ, ざじずぜぞ]
削除された要素がある
listAには「かきくけこ」、「さしすせそ」の要素が2つずつありますが、removeAllメソッドによって重複した複数の同じ要素を全て削除しています。
また、削除したことからremoveAllはtrueを返しています。
今回のポイント
removeAllで2つのリストから重複する要素を削除
2つのリストで重複する要素を削除するにはListクラスのremoveAllメソッドを使用する
⚫︎ ListクラスのremoveAllメソッドで2つのリストで重複する要素を削除する
(サンプルコードでlistAとlistBで重複している要素は「かきくけこ」と「さしすせそ」の2つである)
⚫︎ 要素を1つ以上、削除する場合、removeAllメソッドは「true」を返し、重複した要素で同じ要素が複数あった場合は全て削除する
⚫︎ 重複する要素がない為、removeAllメソッドは「false」を返す
⚫︎ removeAllメソッドを呼び出すと呼び出した際のリストの要素が消えるが、パラメータで指定したリストはそのまま
関連記事
2つのリスト(List)で重複しない要素を削除するretainAllメソッドについてはこちらをご参考ください。
リスト(List)から要素を削除するremoveメソッドについてはこちらをご参考ください。
リスト(List)から全要素を削除するclearメソッドについてはこちらをご参考ください。
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。