Java 映射替换了列表对象的所有相同键值
我试图只替换bean列表中选定索引的映射细节,但它替换了包含相同键的每个列表对象的所有值。如果我在设置新值之前创建了新的map对象,那么它可以正常工作,但我想知道下面代码行为不正常的原因Java 映射替换了列表对象的所有相同键值,java,Java,我试图只替换bean列表中选定索引的映射细节,但它替换了包含相同键的每个列表对象的所有值。如果我在设置新值之前创建了新的map对象,那么它可以正常工作,但我想知道下面代码行为不正常的原因 public static void main(String[] args) { List<PolicyAddlnInsuredBean> lst = new ArrayList<PolicyAddlnInsuredBean>(); PolicyAddlnInsured
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个索引处的对象上反映出来。它的行为如何?预期的结果是什么?实际打印出来的是什么?谢谢,现在我清楚了。它引用的是同一个对象,因此更新所有值。