【问题标题】:Filling Map - java填充图 - java
【发布时间】:2012-01-20 14:30:40
【问题描述】:

我在用 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}}

我做错了什么?

【问题讨论】:

  • 你想要它是什么?

标签: java collections map hashmap fill


【解决方案1】:

在循环内移动以下行:

HashMap<String, String> map = new HashMap<String, String>();

否则每次迭代都会修改相同的内部映射。最终结果是外部映射包含对同一个内部映射的多个引用。

这里是更正的版本:

for ( String line : this.lines )
{
    HashMap<String, String> map = new HashMap<String, String>();
    singleData = line.split("\\|\\|");
    ...

【讨论】:

    【解决方案2】:

    在 for 循环中声明 HashMap&lt;String, String&gt; map = new HashMap&lt;String, String&gt;();

    【讨论】:

      【解决方案3】:

      您在循环中使用相同的地图实例。也应该是

      Map<Integer, Map<String, String>> lineArrayData = new HashMap<Integer, HashMap<String, String>>();
      Map<String, String> map = new HashMap<String, String>();
      

      【讨论】:

        猜你喜欢
        • 2011-08-15
        • 2017-05-28
        • 1970-01-01
        • 1970-01-01
        • 2016-08-18
        • 2011-09-21
        • 1970-01-01
        • 1970-01-01
        • 2015-08-14
        相关资源
        最近更新 更多