Java 映射替换了列表对象的所有相同键值

Java 映射替换了列表对象的所有相同键值,java,Java,我试图只替换bean列表中选定索引的映射细节,但它替换了包含相同键的每个列表对象的所有值。如果我在设置新值之前创建了新的map对象,那么它可以正常工作,但我想知道下面代码行为不正常的原因 public static void main(String[] args) { List<PolicyAddlnInsuredBean> lst = new ArrayList<PolicyAddlnInsuredBean>(); PolicyAddlnInsured

我试图只替换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);
}
publicstaticvoidmain(字符串[]args){
List lst=new ArrayList();
PolicyAddLnsuredBean pb=新的PolicyAddLnsuredBean();
Map epInfoMap=新的HashMap();
Map Map=newhashmap();
地图放置(“添加需求”、“是”);
地图放置(“选择的FLG”、“否”);
epInfoMap.put(“AL”,map);
pb.setEpInfoMap(epInfoMap);
第一次添加(pb);
epInfoMap=新HashMap();
map=新的HashMap();
地图放置(“添加需求”、“是”);
地图放置(“选择的FLG”、“否”);
epInfoMap.put(“AL”,map);
pb.setEpInfoMap(epInfoMap);
第一次添加(pb);
lst.get(0.getEpInfoMap().get(“AL”).put(“selectedFlg”,“Yes”);
系统输出打印项次(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 + "]";
  }

}
公共类PolicyAddLnsuredBean{
私有映射epInfoMap=newhashmap();
公共地图getEpInfoMap(){
返回地图;
}
公共无效设置epInfoMap(映射epInfoMap){
this.epInfoMap=epInfoMap;
}
@凌驾
公共字符串toString(){
返回“PolicyAddlnInsuredBean[epInfoMap=“+epInfoMap+”]”;
}
}

只有一个
pb
对象,添加两次到
lst
(原则:“检查
new
s”)。

同一个pb对象被添加两次到列表中。因此,即使您在第0个索引处更改pb对象,更改也会在第1个索引处的对象上反映出来。

它的行为如何?预期的结果是什么?实际打印出来的是什么?谢谢,现在我清楚了。它引用的是同一个对象,因此更新所有值。