java—当两个对象分别声明时,为什么两个对象共享同一个linkedlist?

xbp102n0  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(251)

这个问题在这里已经有答案了

在一个类中共享相同值的java(4个答案)
5天前关门了。
我有一个散列图,应该显示艺术家和他们的歌曲。我有两个艺术家的对象声明为马克斯和布赖恩。当我执行代码时,两位艺术家共享歌曲列表。如何将添加的歌曲分开,以便每个艺术家都有自己的列表?
我的电流输出是:
布莱恩:你好,世界,世界,世界
麦克斯:你好,世界,世界,世界,世界
当我想要的时候:
布莱恩:世界,世界
麦克斯:你好,世界,世界
这个类创建Map并添加艺术家/歌曲。

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class music {

    public static void run() {
        Artists max = new Artists("Max");
        Artists brian = new Artists("Brian");

        Map<String, String> musicLibrary = new HashMap<>();
        musicLibrary.put(max.getArtist(), max.addSong("Hello"));
        musicLibrary.put(max.getArtist(), max.addSong("World"));
        musicLibrary.put(brian.getArtist(), brian.addSong("World"));
        musicLibrary.put(brian.getArtist(), brian.addSong("World"));
        musicLibrary.put(max.getArtist(), max.addSong("World"));

        Set<String> keySet = musicLibrary.keySet();
        for (String key : keySet) {
            String value = musicLibrary.get(key);
            System.out.println(key + " : " + value);
        }
    }
}

此类是artists对象。

import java.util.LinkedList;
import java.util.ListIterator;

public class Artists {

    String songName;
    String artist;
    static LinkedList<String> artistSongs = new LinkedList<String>();
    static ListIterator<String> songsIt = artistSongs.listIterator();

    public Artists(String artist){
        this.artist = artist;
    }

    public static String addSong(String songName){
        //this.artist = artist;
        artistSongs.add(songName);
        return output();
    }

    public static String output(){
        String allSongs = "";

        for(String song: artistSongs) {
            allSongs = allSongs + ", " + artistSongs.get(artistSongs.indexOf(song));
        }

        return allSongs;
    }

    public String getArtist(){
        return artist;
    }
}

我的电流输出是:
布莱恩:你好,世界,世界,世界
麦克斯:你好,世界,世界,世界,世界
当我想要的时候:
布莱恩:世界,世界
麦克斯:你好,世界,世界

ppcbkaq5

ppcbkaq51#

你已经宣布 artistSongs 作为 static . 这意味着它不属于特定示例,而是属于类,并且在所有示例之间共享。将其定义为一个示例变量,您应该可以:

List<String> artistSongs = new LinkedList<>();

相关问题