我正在尝试插入 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/