当前位置: 代码迷 >> Android >> java 中关于地图的赋值有关问题
  详细解决方案

java 中关于地图的赋值有关问题

热度:75   发布时间:2016-05-01 15:11:01.0
java 中关于map的赋值问题
贴上部分代码:
Map<String, Map<String, Integer>> fingerprint;
Map<String, Integer> in;
in = new HashMap();
fingerprint = new HashMap();
  in.put("1-TP-LINK_2348CC", -66);
  in.put("1-hit404", -70);
  in.put("1-441", -97);
  in.put("1-422", -100);
  fingerprint.put("new404", in);
//==================================================
  in.clear();
  in.put("2-TP-LINK_PocketAP_584322", -81);
  in.put("2-Connectify-xxxx", -85);
  in.put("2-441", -99);
  fingerprint.put("new410", in);

上面是部分代码,调试过程中,当执行完===上面的部分时fingerprint中的内容还是正常的,为:
{new404={1-422=-100, 1-TP-LINK_2348CC=-66, 1-441=-97, 1-hit404=-70}}
但是再执行完====下面的语句时,fingerprint中的内容就变成这样了:
{new410={2-Connectify-xxxx=-85, 2-441=-99, 2-TP-LINK_PocketAP_584322=-81}, new404={2-Connectify-xxxx=-85, 2-441=-99, 2-TP-LINK_PocketAP_584322=-81}}

我觉得很诧异阿,为什么会是这个结果,按理说结果应该是:
{new404={1-422=-100, 1-TP-LINK_2348CC=-66, 1-441=-97, 1-hit404=-70}, new404={2-Connectify-xxxx=-85, 2-441=-99, 2-TP-LINK_PocketAP_584322=-81}}
有哪位能给解释一下,我什么地方错了?

------解决方案--------------------
in.clear();改为in = new HashMap<String, Integer>();
------解决方案--------------------
你in.clear()之后变成这样fingerprint.put("new404", {});此时in={};
然后下面你又向fingerprint里面put了一个in变成这样 fingerprint.put("new410", in);相当于不仅新添加了一个in,而且你给in又赋了一次值,所以fingerprint有连个key了,而且值都是in的值。

不知道我讲清楚了没有,希望能帮助到你。
  相关解决方案