Java 通过返回ArrayList并为其赋值,将元素添加到HashMap中的ArrayList 介绍

Java 通过返回ArrayList并为其赋值,将元素添加到HashMap中的ArrayList 介绍,java,arraylist,hashmap,Java,Arraylist,Hashmap,我们想在地图中搜索是否包含特定的歌手。如果是这样,我们将在属于singer的磁盘列表中添加磁盘。如果singer不存在,那么我们将singer添加到Map中,并使用一个空的ArrayList 地图的结构如下所示: Map<Singer,List<Disk>> diskMap = new HashMap<Singer, List<Disk>>(); 当我们使用discography.add(disk)时添加磁盘。它会在地图上更新吗 它与diskM

我们想在
地图
中搜索是否包含特定的
歌手
。如果是这样,我们将在属于
singer
磁盘列表中添加
磁盘
。如果
singer
不存在,那么我们将
singer
添加到
Map
中,并使用一个空的
ArrayList

地图的结构如下所示:

Map<Singer,List<Disk>> diskMap = new HashMap<Singer, List<Disk>>();
  • 当我们使用
    discography.add(disk)时
    添加磁盘。它会在地图上更新吗
  • 它与diskMap.get(singer.add(disk)类似吗
  • 是否正确更新?它在内存中是如何工作的

源代码
public void addDisk(磁盘){
Singer-Singer=disk.getSinger();
List discography=null;
if(diskMap.get(singer)==null){
put(singer,newarraylist());
}
discography=diskMap.get(singer);
添加(磁盘);
}
当我们使用discography.add(disk)时;添加磁盘。它会在地图上更新吗? =>是的

它与diskMap.get(singer.add(disk)类似吗? =>是的

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

discography=diskMap.get(singer)

这会将discography变量指定给与地图条目相同的对象(相同的列表)

两者都指向相同的内存对象(相同的引用)。如果将元素添加或删除到discography,也会影响地图中的列表

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

它与diskMap.get(singer.add(disk)类似吗? =>是的

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

discography=diskMap.get(singer)

这会将discography变量指定给与地图条目相同的对象(相同的列表)

两者都指向相同的内存对象(相同的引用)。如果将元素添加或删除到discography,也会影响地图中的列表

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

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

它与diskMap.get(singer.add(disk)类似吗

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

对。内存中:

  • map.get
    查找并返回给定键的列表。如果没有值,则返回
    null
    。内部
    HashMap
    使用
    EntrySet
    存储名为
    Map.Entry的键值对
  • 列表。添加
    将元素添加到列表。Java列表是可变的,因此不会有任何复制
当我们使用discography.add(disk)时;添加磁盘。它会在地图上更新吗

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

它与diskMap.get(singer.add(disk)类似吗

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

对。内存中:

  • map.get
    查找并返回给定键的列表。如果没有值,则返回
    null
    。内部
    HashMap
    使用
    EntrySet
    存储名为
    Map.Entry的键值对
  • 列表。添加
    将元素添加到列表。Java列表是可变的,因此不会有任何复制
您是否使用Java 8?如果是这样,
diskMap.computeIfAbsent(singer,x->new ArrayList())
一行就解决了这个问题。1)它将更新你的映射值2)diskMap.get(singer)。add(disk)和discography.add(disk);你们在Java 8上都一样吗?如果是这样,
diskMap.computeIfAbsent(singer,x->new ArrayList())
一行就解决了这个问题。1)它将更新你的映射值2)diskMap.get(singer)。add(disk)和discography.add(disk);都是sameyes吗?我检查了地图中列表的大小,它正在增加。真有趣。我被指针弄糊涂了。是的,我检查了地图上列表的大小,它在增加。真有趣。我被指针弄丢了。是的。在Java中,我们只对对象类型使用引用。对于原语,我们使用值。看看这个主题。有很多信息可以启发你:是的。在Java中,我们只对对象类型使用引用。对于原语,我们使用值。看看这个主题。有很多信息可以启发你:
discography = diskMap.get(singer);
discography.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);
    }