【问题标题】:Add Element to ArrayList in a HashMap by returning the ArrayList and assigning a value to it通过返回 ArrayList 并为其赋值,将元素添加到 HashMap 中的 ArrayList
【发布时间】:2016-10-04 09:16:11
【问题描述】:

简介

如果Map 包含特定的singer,我们想搜索它。如果是这样,那么我们将在属于singerlist of disks 中添加一个disk。如果singer 不存在,那么我们将singer 添加到Map,并使用一个空的ArrayList

地图结构如下:

Map<Singer,List<Disk>> diskMap = new HashMap<Singer, List<Disk>>();

SingerList&lt;Disk&gt;类型。

代码运行正常。最后一段代码我没看懂:

discography = diskMap.get(singer);
discography.add(disk);
  • 当我们使用discography.add(disk); 添加磁盘时。会在地图中更新吗?
  • 和diskMap.get(singer).add(disk)类似吗?
  • 如果更新正确?它在内存中是如何工作的?

源代码

public void addDisk(Disk disk){
    Singer singer = disk.getSinger();
    List<Disk> discography = null;
    if(diskMap.get(singer) == null){
        diskMap.put(singer, new ArrayList<Disk>());
    }

    discography = diskMap.get(singer);
    discography.add(disk);
    }

【问题讨论】:

  • 您使用的是 Java 8 吗?如果是这样,diskMap.computeIfAbsent(singer, x -&gt; new ArrayList&lt;&gt;()) 会在一行中解决这个问题。
  • 1) 它将更新您的地图值 2) diskMap.get(singer).add(disk) 和 discography.add(disk);都是一样的

标签: java arraylist hashmap


【解决方案1】:

当我们使用 discography.add(disk);添加磁盘。会在地图上更新吗? => 是的。

是不是类似于diskMap.get(singer).add(disk)? => 是的。

如果更新正确?它在内存中是如何工作的?

唱片 = diskMap.get(歌手);

这会将唱片 var 分配给与地图条目相同的对象(相同的列表)。

两者都指向同一个内存对象(同一个引用)。如果您在唱片目录中添加或删除元素,它也会影响地图中的列表

【讨论】:

  • 是的,我检查了地图中列表的大小,它正在增加。非常有意思。我迷失了指针。
【解决方案2】:

当我们使用 discography.add(disk);添加磁盘。会在地图上更新吗?

将给定关键点的值映射到列表。调用 map.get 不会复制给定键的值。

和diskMap.get(singer).add(disk)类似吗?

是的。

如果更新正确?它在内存中是如何工作的?

是的。在内存中:

  • map.get 查找并返回给定键的列表。如果没有值,则返回 null。在内部HashMap 使用EntrySet 存储名为Map.Entry 的键值对。
  • list.add 将元素添加到列表中。 Java 列表是可变的,因此不会有任何复制。

【讨论】:

  • 是的。在 Java 中,我们只使用对象类型的引用。对于基元,我们使用值。
  • 看看这个话题。有很多信息可以启发你:stackoverflow.com/questions/40480/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-28
  • 2021-02-22
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
相关资源
最近更新 更多