2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

hashmapの使い方にハマった件について

Last updated at Posted at 2018-05-29

はじめに

私は、
〜2013年3月 文系大学学部卒
〜2018年4月 インフラ系のSIer # LinuxとかAzureとか
2018年5月〜 WEB系エンジニア # 開発できるようになりたかった
という変遷をたどり、
絶賛業務でJava勉強中の身です。

開発のやり方が学べたら
フルスタックなスキルを身につけられるように頑張りたいと思ってます。

だいぶ初心者な記載が多いかもしれませんが、ご了承ください。

やりたかったこと

クローリングして取ってきた情報を加工し、
複数のテーブルにインサートを行う処理を

①共通のMapを作成し、情報を入れる
②Aテーブル用のMapを作成し、①のMapを入れ、Aテーブル用のMapを加工しAテーブルにインサート
③Bテーブル用のMapを作成し、①のMapを入れ、Bテーブル用のMapを加工しBテーブルにインサート

ということがやりたかった

やったこと(失敗)

下記メソッドを実行して

public void putMain()  {
        Map<String, Object> insertData = new HashMap<>();
        insertData.put("aaa","aaa");
        insertData.put("bbb","bbb");
        insertData.put("ccc","ccc");
        putA(insertData);
        putB(insertData);
}
public void putA(Map<String, Object> insertData)  {
        Map<String, Object> aData = new HashMap<>();
        aData = insertData;
        aData.remove("bbb");
        insert(aData);
}
public void putB(Map<String, Object> insertData)  {
        Map<String, Object> bData = new HashMap<>();
        bData = insertData;
        bData.remove("aaa");
        insert(bData);
}
期待した結果
insertData aData bData
aaa aaa
bbb bbb
ccc ccc ccc
実際の結果
insertData aData bData
aaa
ccc ccc ccc

というように
共通テーブルの内容が変更されてしまった。

直したこと(成功)

public void putMain()  {
        Map<String, Object> insertData = new HashMap<>();
        insertData.put("aaa","aaa");
        insertData.put("bbb","bbb");
        insertData.put("ccc","ccc");
        putA(insertData);
        putB(insertData);
}
public void putA(Map<String, Object> insertData)  {
        Map<String, Object> aData = new HashMap<>(insertData);
        aData.remove("bbb");
        insert(aData);
}
public void putB(Map<String, Object> insertData)  {
        Map<String, Object> bData = new HashMap<>(insertData);
        bData.remove("aaa");
        insert(bData);
}

xDataの宣言後に代入するのではなく、
xDataの宣言をするときに、引数でinsertDataを与えてあげたら
期待通りの動きになった。

終わりに

なぜそうなのかはまだ勉強できていないので、わかってはいません。。。
先輩教えてください><

2
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?