我在Java中填写Map
时遇到问题,我认为这很简单,但我无法解决这个问题。
让我们来看看:
Map<Integer, HashMap<String, String>> lineArrayData = new HashMap<Integer, HashMap<String, String>>();
HashMap<String, String> map = new HashMap<String, String>();
String singleData[];
int lineCounter = 0;
for ( String line : this.lines )
{
singleData = line.split("\\|\\|");
map.put("type", singleData[0]);
map.put("text", singleData[1]);
map.put("page", singleData[2]);
map.put("x", singleData[3]);
map.put("y", singleData[4]);
lineArrayData.put(lineCounter, map);
lineCounter++;
}
System.out.println(lineArrayData);
我有输入
barcode||testowy test||1||100||100
text||texttstdasd||2||500||300
我的输出是:
{0={text=texttstdasd, page=2, type=text, y=300, x=500}, 1={text=texttstdasd, page=2, type=text, y=300, x=500}}
我做错了什么?
答案 0 :(得分:3)
在循环中移动以下行:
HashMap<String, String> map = new HashMap<String, String>();
否则每次迭代都会修改相同的内部地图。最终结果是外部地图包含对同一内部地图的多个引用。
以下是更正后的版本:
for ( String line : this.lines )
{
HashMap<String, String> map = new HashMap<String, String>();
singleData = line.split("\\|\\|");
...
答案 1 :(得分:1)
在for循环中声明HashMap<String, String> map = new HashMap<String, String>();
。
答案 2 :(得分:0)
您在循环中使用相同的地图实例。那也应该是
Map<Integer, Map<String, String>> lineArrayData = new HashMap<Integer, HashMap<String, String>>();
Map<String, String> map = new HashMap<String, String>();