Java 将值插入HashMap无法正常工作

Java 将值插入HashMap无法正常工作,java,arraylist,hashmap,Java,Arraylist,Hashmap,我试图将字符串和数组列表的值插入哈希映射。for循环中的代码工作正常,但在将ArrayList值插入HashMap时,它没有插入我想要的值 我的代码: for(int i=0; i<fileNames.length; i++) { File imageFile = new File(fileNames[i]); metadata = ImageMetadataReader.readMetadata(imageFile); String[] results;

我试图将
字符串
数组列表
的值插入
哈希映射
。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());
}

您一直在重复使用同一个ArrayList。因此,当您清除它时,它也会清除您以前在地图中放置的内容。当你填充它时,它也会填充地图上已经存在的东西。因此,所有关键点都指向包含上次跑步数据的同一列表


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

您一直在重复使用相同的ArrayList。因此,当您清除它时,它也会清除您以前在地图中放置的内容。当你填充它时,它也会填充地图上已经存在的东西。因此,所有关键点都指向包含上次跑步数据的同一列表


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

您一直在重复使用相同的ArrayList。因此,当您清除它时,它也会清除您以前在地图中放置的内容。当你填充它时,它也会填充地图上已经存在的东西。因此,所有关键点都指向包含上次跑步数据的同一列表


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

您一直在重复使用相同的ArrayList。因此,当您清除它时,它也会清除您以前在地图中放置的内容。当你填充它时,它也会填充地图上已经存在的东西。因此,所有关键点都指向包含上次跑步数据的同一列表

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

这是一个错误:

if (tag.getTagName() == "Keywords")
这将永远不会是真的。你应使用:

if (tag.getTagName().equals("Keywords"))
但您的主要问题是,您正在为每个条目重用相同的容器。您应该为每个条目创建一个新的条目,否则您将一次又一次地清除并添加到相同的映射值。

这是一个错误:

if (tag.getTagName() == "Keywords")
这将永远不会是真的。你应使用:

if (tag.getTagName().equals("Keywords"))
但您的主要问题是,您正在为每个条目重用相同的容器。您应该为每个条目创建一个新的条目,否则您将一次又一次地清除并添加到相同的映射值。

这是一个错误:

if (tag.getTagName() == "Keywords")
这将永远不会是真的。你应使用:

if (tag.getTagName().equals("Keywords"))
但您的主要问题是,您正在为每个条目重用相同的容器。您应该为每个条目创建一个新的条目,否则您将一次又一次地清除并添加到相同的映射值。

这是一个错误:

if (tag.getTagName() == "Keywords")
这将永远不会是真的。你应使用:

if (tag.getTagName().equals("Keywords"))

但您的主要问题是,您正在为每个条目重用相同的容器。您应该为每个条目创建一个新的值,否则您将一次又一次地清除并添加到相同的映射值。

在每次迭代中,您将清除容器,向其添加元素,然后将容器添加到映射中

地图只存储引用。它不会复制列表。因此,最终所有键都具有相同的值:容器列表,包含上一次迭代添加到其中的内容


每次迭代都应创建一个新列表,并将此列表添加到地图中。

在每次迭代中,您将清除容器,向其中添加元素,然后将容器添加到地图中

地图只存储引用。它不会复制列表。因此,最终所有键都具有相同的值:容器列表,包含上一次迭代添加到其中的内容


每次迭代都应创建一个新列表,并将此列表添加到地图中。

在每次迭代中,您将清除容器,向其中添加元素,然后将容器添加到地图中

地图只存储引用。它不会复制列表。因此,最终所有键都具有相同的值:容器列表,包含上一次迭代添加到其中的内容


每次迭代都应创建一个新列表,并将此列表添加到地图中。

在每次迭代中,您将清除容器,向其中添加元素,然后将容器添加到地图中

地图只存储引用。它不会复制列表。因此,最终所有键都具有相同的值:容器列表,包含上一次迭代添加到其中的内容


每次迭代都应该创建一个新列表,并将此列表添加到地图中。

您正在将字符串与
==
进行比较,这没有帮助-但是我们几乎没有足够的信息知道您预期的结果是什么(或者为什么),来告诉您这是否是唯一的问题。问题是什么?查看输出,所有内容似乎都插入正确。您正在将字符串与
==
进行比较,这没有帮助-但是我们没有足够的信息来了解您期望的结果是什么(或者为什么),以告诉您这是否是唯一的问题。问题是什么?查看输出,所有内容似乎都插入正确。您正在将字符串与
==
进行比较,这没有帮助-但是我们没有足够的信息来了解您期望的结果是什么(或者为什么),以告诉您这是否是唯一的问题。问题是什么?查看输出,所有内容似乎都插入正确。您正在将字符串与
==
进行比较,这没有帮助-但是我们没有足够的信息来了解您期望的结果是什么(或者为什么),以告诉您这是否是唯一的问题。问题是什么?查看输出,所有内容似乎都正确插入了+1当您在HashMap中放置对集合的引用时,您只是复制引用,而不是内容。当重用集合时,只使用一个ArrayList,其中所有键都指向同一个列表。您要做的是为每个键创建一个新的ArrayList,以便它们是不同的列表。+1在HashMap中放置对集合的引用时,您只复制引用,而不是复制内容。