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);
}