【Java】retainAllを使って2つのリストで重複しない要素を削除する!
2つのリストで重複しない要素を削除する場合にはListクラスのretainAllメソッドを使用します。
2つのリストで重複する要素を削除するremoveAllメソッドとは反対のメソッドとなります。
ListクラスのretainAllメソッドは、List型に指定した以外の要素をすべて削除します。
そのため、リストに必要なもの以外の要素を削除したい場合には便利です。
今回はListクラスのretainAllメソッドを使って、以下の場合で重複しない要素を削除を行います。
⚫︎ 重複しない要素がある場合に要素を削除
⚫︎ 重複しない要素がない場合に要素を削除
⚫︎ 重複しない要素が大文字と小文字である場合に要素を削除
目次
retainAllメソッドとは
ListクラスのretainAllメソッドは、List型に指定した以外の要素をすべて削除するためのメソッドです。
そのため、指定した以外の要素をすべて削除するremoveAllメソッドとは対となるメソッドとなります。
retainAllメソッドの書き方
retainAllメソッドの構文は下記となります。
1 |
List1.retainAll(List2); |
retainAllの()にList2を指定することでretainAllの前に指定したList1と重複していない要素を削除することができます。
また、retainAllメソッドは要素を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 37 |
// 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("がぎぐげご"); listB.add("さしすせそ"); listB.add("ざじずぜぞ"); System.out.println("・削除前"); System.out.println(listA); System.out.println(listB); // listAの要素のうちlistBにないものを削除 boolean result = listA.retainAll(listB); System.out.println("・削除後"); System.out.println(listA); System.out.println(listB); System.out.println( result ? "削除された要素がある": "要素は削除されなかった"); } } |
出力結果
・削除前
[あいうえお, かきくけこ, さしすせそ, たちつてと]
[かきくけこ, がぎぐげご, さしすせそ, ざじずぜぞ]
・削除後
[かきくけこ, さしすせそ]
[かきくけこ, がぎぐげご, さしすせそ, ざじずぜぞ]
削除された要素がある
retainAllメソッドを使用して、重複していない要素をlistAから削除しています。
また、削除したことからretainAllメソッドは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 36 37 |
// 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("かきくけこ"); listB.add("さしすせそ"); listB.add("たちつてと"); System.out.println("・削除前"); System.out.println(listA); System.out.println(listB); // listAの要素のうちlistBにないものを削除 boolean result = listA.retainAll(listB); System.out.println("・削除後"); System.out.println(listA); System.out.println(listB); System.out.println( result ? "削除された要素がある": "要素は削除されなかった"); } } |
出力結果
・削除前
[あいうえお, かきくけこ, さしすせそ, たちつてと]
[あいうえお, かきくけこ, さしすせそ, たちつてと]
・削除後
[あいうえお, かきくけこ, さしすせそ, たちつてと]
[あいうえお, かきくけこ, さしすせそ, たちつてと]
要素は削除されなかった
重複していない要素がなかったため、retainAllはfalseを返しています。
リストの重複する要素が大文字と小文字である場合
retainAllメソッドは「A」と「a」のように大文字と小文字の同じ意味である場合も重複していないと判断して削除します。
例
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 |
// 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("AIUEO"); listA.add("KAKIKUKEKO"); listA.add("SASISUSESO"); listA.add("TATITUTETO"); List<String> listB = new ArrayList<String>(); //リストに要素を追加 listB.add("kakikukeko"); listB.add("gagigugego"); listB.add("sasisueso"); listB.add("zazizuezo"); System.out.println("・削除前"); System.out.println(listA); System.out.println(listB); // listAの要素のうちlistBにないものを削除 boolean result = listA.retainAll(listB); System.out.println("・削除後"); System.out.println(listA); System.out.println(listB); System.out.println( result ? "削除された要素がある": "要素は削除されなかった"); } } |
出力結果
・削除前
[AIUEO, KAKIKUKEKO, SASISUSESO, TATITUTETO]
[kakikukeko, gagigugego, sasisueso, zazizuezo, ]
・削除後
[]
[kakikukeko, gagigugego, sasisueso, zazizuezo, ]
削除された要素がある
listAには「KAKIKUKEKO」と「SASISUSESO」の大文字、listBには「kakikukeko」と「sasisueso」の小文字の要素がありますが、removeAllメソッドによって重複していない要素を削除しています。
また、削除したことからremoveAllはtrueを返しています。
今回のポイント
retainAllで2つのリストから重複しない要素を削除
2つのリストで重複しない要素を削除するにはListクラスのretainAllメソッドを使用する
⚫︎ ListクラスのretainAllメソッドで2つのリストで重複しない要素を削除する
⚫︎ retainAllメソッドを呼び出すと、呼び出した際のリスト(list1)からその要素が削除され、パラメータで指定したリスト(list2)はそのままである
⚫︎ 要素を1つ以上、削除する場合、retainAllメソッドは「true」を返し、削除しない場合は「false」を返す
⚫︎ 「A」や「a」のように重複する要素が大文字と小文字である場合、retainAllメソッドは、「重複していない」と判断して削除する
関連記事
2つのリスト(List)で重複する要素を削除するremoveAllメソッドについてはこちらをご参考ください。
リスト(List)から要素を削除するremoveメソッドについてはこちらをご参考ください。
リスト(List)から全要素を削除するclearメソッドについてはこちらをご参考ください。
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。