【Java】addAllを使って2つのリスト(List)をマージする!
2つのリスト(List)をマージする場合にはListクラスのaddAllメソッドを使用します。
ListクラスのaddAllメソッドは、リストの複数の要素をまとめて追加するメソッドであることから、2つリストをマージすることができます。
そのため、様々なところから取得してきた複数のリストの要素を1つのリストにしてまとめたい場合にaddAllメソッドは便利です。
今回はListクラスのaddAllメソッドを使って以下の場合で2つのリスト(List)のマージを行います。
⚫︎ リストをマージする場合
⚫︎ 位置を指定してリストをマージする場合
目次
addAllメソッドとは
ListクラスのaddAllメソッドは、複数の値をまとめて追加するメソッドとなります。
ListクラスのメソッドにはaddAllメソッドとよく似たaddメソッドがありますが、addメソッドは「1つの要素を追加する」メソッドです。
その為、単数追加の場合はaddメソッド、複数追加の場合はaddAllメソッドと認識しておきましょう。
addAllメソッドの書き方
addAllメソッドの構文は下記となります。
1 |
list.addAll(インデックス, 追加するリスト); |
パラメータ
・ インデックス:
どこから追加するのか場所をインデックスを指定する。(指定しない場合は0)
・ 追加するリスト:
追加するリストを指定する。
addAllの()に第1パラメータをインデックス、第2ラメータを追加するリストとして指定することでリストの要素を別のリストに追加します。
例えば「list1.addAll(1, list2);」とすると、list1の2番目から割り込みという形でlist2の要素が追加されます。
その為、list1の残りの要素はlist2の後ろに格納されます。
また、インデックスを指定しない場合は、list2の一番後ろに追加されます。
2つのリストをマージするサンプルコード
リスト(List)の要素を上書きするサンプルコードを紹介します。
リストをマージする場合
例
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 |
// 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("タチツテト"); // listAとlistBをマージ listA.addAll(listB); // マージ後のリストの表示 System.out.println("listA:" + listA); System.out.println("listB:" + listB); } } |
出力結果
list1:[あいうえお, かきくけこ, たちつてと, アイウエオ, カキクケコ, タチツテト]
list2:[アイウエオ, カキクケコ, タチツテト]
リストの要素数がパラメータの配列のサイズ以下の場合、パラメータの配列に要素を格納したものを返しています。
上書きされなかった要素の先頭の要素には、nullが代入されています。
位置を指定してリストをマージする場合
位置を指定してリストをマージするにはaddAllメソッドの第1パラメータにインデックス指定します。
例1
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 |
// 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("AIUEO"); listB.add("KAKIKUKEKO"); listB.add("TATITUTETO"); //位置を指定してlistAとlistBをマージ listB.addAll(2, listA); // マージ後のリストの表示 System.out.println("listB:" + listB); System.out.println("listA:" + listA); } } |
出力結果
listB:[AIUEO, KAKIKUKEKO, アイウエオ, カキクケコ, タチツテト, TATITUTETO]
listA:[アイウエオ, カキクケコ, タチツテト]
addAll(2, listA)とした為、listAの要素がlistBの2番目から割り込みの形で追加されています。
今回のポイント
addAllで2つのリスト(List)をマージ
2つのリストをマージするにはListクラスのaddAllメソッドを使用する
⚫︎ ListクラスのaddAllメソッドで2つのリストをマージする
⚫︎ インデックスを指定せずにaddAllメソッドを呼び出す場合は最後の要素の後ろに追加される
⚫︎ Listクラスのaddメソッドと同様に、addAllメソッドの第1パラメータをインデックスを指定することで指定したインデックスからマージすることができる
⚫︎ マージするのはメソッドを呼び出した方のリスト(list)だけであり、パラメータとして渡されたリスト(追加するリスト)の中身は変更されない
関連記事
リスト(List)に要素を追加するaddメソッドについてはこちらをご参考ください。
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。