私は
private Map<String,List<ProductScheme>> discountMap = new HashMap<String,List<ProductScheme>>();
リストを取得してリストdiscountMap
にアイテムを追加した場合、リストを再度追加する必要がありますか、discount map
それとも必須ではありませんか?
私は
private Map<String,List<ProductScheme>> discountMap = new HashMap<String,List<ProductScheme>>();
リストを取得してリストdiscountMap
にアイテムを追加した場合、リストを再度追加する必要がありますか、discount map
それとも必須ではありませんか?
いいえ、必須ではありません。get
マップに保存されているリストへの参照を返します。したがって、get
(add、remove ...)で取得したリストで行った変更は、同じオブジェクトであるため、マップのリストにも反映されます。
以前にリストがなかった場合にのみ、リストを追加する必要があります。私が使用するパターンは
List<ProductScheme> list = discountMap.get(key);
if (list == null)
discountMap.put(key, list = new ArrayList<>());
list.add(value);
マップからリストへのオブジェクト参照を取得するだけなので、マップに再度配置する必要はありません。
List someList = discountMap.get("firstList");
は同じリストであり、オブジェクトへのポインタを格納する別の変数です。
いいえ。変更されたオブジェクトをdiscountMap変数に再度追加する必要はありません。マップからgetメソッドを呼び出すと、その特定のオブジェクトの参照(オブジェクトアドレス)のみが返され、マップ内にあるこのオブジェクトを変更します(実際には、マップ内でも、オブジェクト参照があります。同じように上記のオブジェクト参照を使用して、両方の場所からそのメモリ位置を使用して参照しているオブジェクト。
これは、参照を使用してオブジェクトを参照しているすべての状況に共通です。