簡體   English   中英

映射替換了列表對象的所有相同鍵值

[英]Map replaced all the same key value of list object

我試圖從bean列表中替換僅選定索引的地圖詳細信息,但它替換了包含相同鍵的每個列表對象的所有值。 如果我在創建新值之前創建新的map對象,那么它工作正常,但我想知道下面的代碼行為異常的原因。

public static void main(String[] args) {

    List<PolicyAddlnInsuredBean> lst = new ArrayList<PolicyAddlnInsuredBean>();
    PolicyAddlnInsuredBean pb = new PolicyAddlnInsuredBean();
    Map<String, Map<String, Object>> epInfoMap = new HashMap<String, Map<String,Object>>();

    Map<String,Object> map = new HashMap<String, Object>();
    map.put("addtlnInsReqd", "YES");
    map.put("selectedFlg", "No");
    epInfoMap.put("AL", map);
    pb.setEpInfoMap(epInfoMap);
    lst.add(pb);

    epInfoMap = new HashMap<String, Map<String,Object>>();
    map = new HashMap<String, Object>();
    map.put("addtlnInsReqd", "YES");
    map.put("selectedFlg", "No");
    epInfoMap.put("AL", map);
    pb.setEpInfoMap(epInfoMap);
    lst.add(pb);

    lst.get(0).getEpInfoMap().get("AL").put("selectedFlg", "Yes");
    System.out.println(lst);
}

我的Pojo課程:

public class PolicyAddlnInsuredBean{

  private Map<String,Map<String,Object>> epInfoMap =new HashMap<String, Map<String,Object>>(); 

  public Map<String, Map<String, Object>> getEpInfoMap() {
    return epInfoMap;
  }
  public void setEpInfoMap(Map<String, Map<String, Object>> epInfoMap) {
    this.epInfoMap = epInfoMap;
  }
  @Override
  public String toString() {
      return "PolicyAddlnInsuredBean [epInfoMap=" + epInfoMap + "]";
  }

}

只有一個pb對象,兩次添加到lst (原理:“檢查new s”)。

相同的pb對象被添加到列表中兩次。因此即使在第0個索引處更改pb對象時,更改也將反映在第一個索引處的對象上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM