【问题标题】:Modify value of LinkedList in HashMap修改HashMap中LinkedList的值
【发布时间】:2019-07-07 15:16:37
【问题描述】:

我需要在我的 HashMap 内的 LinkedList 中添加一个新对象

我尝试将 LinkedList 保存在一个临时变量中,将视频添加到其中,然后使用 put 方法将列表添加到地图中,但我遇到了同样的问题。

public void addVideo(String nameChannell, Video video)
{
    mappa.get(nameChannell).add(video);
}

public void printVideo()
{
    Iterator<String> itera=mappa.keySet().iterator();
    while(itera.hasNext())
    {
        String canale=itera.next();
        LinkedList<Video> lVideo=mappa.get(canale);

        System.out.println("\tCanale: "+canale);
        for(int i=0;i<lVideo.size();i++)
            System.out.println(lVideo.get(i).getNome());
    }
}

将视频添加到我的 hashmap 的主要功能是 addVideo,但是当我这样做时,视频会添加到我的所有键中,而不仅仅是 nameChannel 键。 我认为问题也可能是printVideo 函数,但无法处理。

【问题讨论】:

  • 这意味着您将完全相同的 LinkedList 对象放入映射中的每个键。在循环中按索引访问链表元素非常慢。不要那样做。事实上,您几乎不应该使用 LinkedList。使用 ArrayList。并确保为地图的每个键创建一个新键。
  • 我试过这样,更新linkedList LinkedList
  • 再次阅读我的评论。问题不在于更新列表。问题出在您未发布的代码中:您将 same, unique 列表放入所有键的映射中。不要那样做。为地图的每个键创建一个新列表。
  • 您能说明一下您是如何初始化地图的吗?
  • 非常感谢,没有得到这部分,但现在一切都好:)

标签: java linked-list hashmap


【解决方案1】:

您的addVideo 方法应该如下所示,因为您可能使用与@JB Nizet 提到的值相同的List

public void addVideo(String nameChannell, Video video) {
 if(mappa.containsKey(nameChannell))
 {
   mappa.get(nameChannell).add(video);
 }
 else {
   List<Video> videos = new BakedArrayList();
   video.add(video);
   mappa.put(nameChannell, videos);
 }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多