java - 将值插入 HashMap 无法正常工作

标签 java arraylist hashmap

我正在尝试插入 String 的值和ArrayList<String>进入HashMap<String, ArrayList<String>> 。 for 循环中的代码工作正常,但在将 ArrayList 值插入 HashMap 时,它没有插入我想要的值。

我的代码:

  for(int i=0; i<fileNames.length; i++)
  {
    File imageFile = new File(fileNames[i]);
    metadata = ImageMetadataReader.readMetadata(imageFile);

    String[] results;
    container.clear();
    println(container);

    for (Directory directory : metadata.getDirectories())
    {
      for (Tag tag : directory.getTags())
      {
        if(tag.getTagName() == "Keywords")
        {
          results = tag.getDescription().split(";");

          for(int k=0; k<results.length; k++)
          {
            keywords.add(results[k]);
            container.add(results[k]);
          }
          println(fileNames[i] + ", " + container);
          imageTag.put(fileNames[i], container);
        } 
      }
    }
  }

  println(imageTag.entrySet());
}

打印出:

[]
gardensbythebay.jpg, [gardens, gardens by the bay, supertree, singapore]
[]
mbs.jpg, [marina, bay, sands, ferris, wheel, skyline, singapore]
[]
supertree.jpg, [architecture, marina, gardens, bay, tower, supertree, singapore, gardens by the bay, plants, nature]
[]
uss.JPG, [universal, uss, rws, resort, world, sentosa, studios]

[mbs.jpg=[universal, uss, rws, resort, world, sentosa, studios], 
uss.JPG=[universal, uss, rws, resort, world, sentosa, studios], 
supertree.jpg=[universal, uss, rws, resort, world, sentosa, studios], 
gardensbythebay.jpg=[universal, uss, rws, resort, world, sentosa, studios]]

最佳答案

您不断重复使用同一个 ArrayList。因此,当您清除它时,它也会清除您之前放置在 map 中的内容。当您填充它时,它也会填充 map 中已有的内容。因此,您最终的所有键都指向包含上次运行数据的同一列表。

您需要为每个条目创建一个新的ArrayList。

关于java - 将值插入 HashMap 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21966663/

相关文章:

java - 如何在 Java 8 中使用流将 EntrySet 拆分为映射

java - 如果Java有垃圾回收,那为什么会出现OutOfMemoryError呢?

java - 如何在 VS code 中向 Selenium Java 项目添加引用的库?

java - 打印并行运行的多个 SSH 命令的输出

java - 在java中,如何将一个项目导入到另一个项目中而不将它们放在同一个(Eclipse)工作区中?

java - 如何根据属性找出两个数组列表之间的差异?

Java 数组列表 : Adding primitive type or its wrapper-class: What's the difference?

java - 优化android中列表的支持

java - 将 HashMap 发送到其他 Activity 时如何修复 InvocableTargetException

Java HashMap 插入重复键时