JavaでMapをコピーする方法を現役エンジニアが解説【初心者向け】
初心者向けにJavaでMapをコピーする方法について解説しています。複数の値を扱うデータ型のひとつMapの宣言方法と要素の追加方法、Mapをコピーする場合の書き方、注意点について学びましょう。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
JavaでMapをコピーする方法について、TechAcademyのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。
Javaについてそもそもよく分からないという方は、Javaとは何なのか解説した記事を読むとさらに理解が深まるでしょう。
なお本記事は、TechAcademyのオンラインブートキャンプJava講座の内容をもとに作成しています。
今回は、Javaに関する内容だね!
どういう内容でしょうか?
Mapをコピーする方法について詳しく説明していくね!
お願いします!
目次
Mapとは
Map型は、「キー」と「値」を1セットとして、複数のデータを保持することのできるデータ型のことです。
似たようなデータ型として、配列やList型などの複数の値を保持することのできるデータ型が用意されており、Map型には「キー」があることが大きな違いです。
Map型を宣言するには、Hashmapクラスを用いて、キーのデータ型と値のデータ型を指定して初期化します。
Map<キーの型名, 値の型名> オブジェクト名 = new HashMap<>();
要素を追加したい場合は、putメソッドを用いて、好きなキーとそれに対応する値を追加することができます。
オブジェクト名.put(キー, 値)
Mapをコピーする時の注意点
Map型をコピーするときの注意点は、コピーの種類が2つあるという点です。
2つの異なるコピーとして、「ディープコピー」と「シャローコピー」があります。
ディープコピーでは、もとのMap型のデータのみがコピーされます。
データのみをコピーするため、コピー元とコピー先のMap型は別物です。
一方、シャローコピーでは、もとのMap型の参照先をコピーします。
参照先をコピーすることによって、コピー元のMap型を変更すると、それがコピー先のMap型に反映されるコピーがシャローコピーの特徴です。
ディープコピーでは、コピー元とコピー先のデータが必ずしも一致しないものの、シャローコピーでは、コピー元とコピー先のデータが必ず一致します。
Mapをコピーする方法
Map型をコピーする方法としては、ディープコピーの場合は、Map型に付属するメソッドを利用します。
Map型.clone()
もしくは、コンストラクタにもとのMap型を代入しましょう。
new HashMap<>(もとのMap型)
一方、シャローコピーの場合は、単純にそのまま代入すれば大丈夫です。
Map<キーの型名, 値の型名> 新しいMapオブジェクト = コピー元のMap型
実際に書いてみよう
実際にコードを書いてみて、振る舞いを確認してみましょう。
import java.util.HashMap; import java.util.Map; import java.lang.Integer; public class MapCopy{ public static void main(String[] args){ Map<Integer, String> map1 = new HashMap<>(); map1.put(0,"Japan"); map1.put(1,"America"); map1.put(2,"China"); Map<Integer, String> deepMap = new HashMap<>(map1); Map<Integer, String> shallowMap = map1; System.out.println("もとのMap(変更前)"); for (Integer key : map1.keySet()){System.out.printf("%d : %s",key, map1.get(key));} System.out.println(); map1.put(2,"Korea"); System.out.println("もとのMap(変更後)"); for (Integer key : map1.keySet()){System.out.printf("%d : %s",key, map1.get(key));} System.out.println(); System.out.println("ディープコピーしたMap"); for (Integer key : deepMap.keySet()){System.out.printf("%d : %s",key, deepMap.get(key));} System.out.println(); System.out.println("シャローコピーしたMap"); for (Integer key : shallowMap.keySet()){System.out.printf("%d : %s",key, shallowMap.get(key));} } }
これを実行すると、
もとのMap(変更前) 0 : Japan1 : America2 : China もとのMap(変更後) 0 : Japan1 : America2 : Korea ディープコピーしたMap 0 : Japan1 : America2 : China シャローコピーしたMap 0 : Japan1 : America2 : Korea
と表示されて、ディープコピーの場合にはもとのMapの変更が反映されず、シャローコピーの場合にのみ反映されていることが確認できます。
まとめ
この記事では、Map型のコピーの方法と、ディープコピー、シャローコピーについて解説しました。
参照のコピーなのか、データのコピーなのかを意識するという点が大事なので、覚えておくと今後役に立つと思います。
執筆してくれたメンター
メンターOS
AIプログラミングを使って開発を行う。 プログラミング歴は約3年。 Pythonは割と好きな方。 JavaもAndroid開発で触れていたりする。 大学では物理学を勉強中。 好きな物理理論は一般相対性理論らしい。 意外と動物が好きだったり、、、。 |
JavaでMapをコピーする方法がよく分かったので良かったです!
ゆかりちゃん、これからも分からないことがあったら質問してね!
分かりました。ありがとうございます!
TechAcademyでは、初心者でも、JavaやServletの技術を使ってWebアプリケーション開発を習得できるオンラインブートキャンプを開催しています。
また、現役エンジニアから学べる無料体験も実施しているので、ぜひ参加してみてください。