Java 当两个对象分别声明时,为什么两个对象共享同一个LinkedList?

Java 当两个对象分别声明时,为什么两个对象共享同一个LinkedList?,java,list,dictionary,linked-list,hashmap,Java,List,Dictionary,Linked List,Hashmap,我有一个散列图,用来显示艺术家和他们的歌曲。 我有两个Artists对象声明为max和brian。 当我执行代码时,两位艺术家共享歌曲列表。 如何将添加的歌曲分开,以便每个艺术家都有自己的列表 我当前的输出是: 布莱恩:你好,世界,世界,世界 马克斯:你好,世界,世界,世界,世界 当我想要的时候: 布莱恩:世界,世界 马克斯:你好,世界,世界 此类创建地图并添加艺术家/歌曲 import java.util.HashMap; import java.util.Map; import java.u

我有一个散列图,用来显示艺术家和他们的歌曲。 我有两个Artists对象声明为max和brian。 当我执行代码时,两位艺术家共享歌曲列表。 如何将添加的歌曲分开,以便每个艺术家都有自己的列表

我当前的输出是:
布莱恩:你好,世界,世界,世界
马克斯:你好,世界,世界,世界,世界

当我想要的时候:
布莱恩:世界,世界
马克斯:你好,世界,世界

此类创建地图并添加艺术家/歌曲

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);
        }
    }
}
import java.util.HashMap;
导入java.util.Map;
导入java.util.Scanner;
导入java.util.Set;
公共音乐课{
公共静态无效运行(){
艺术家max=新艺术家(“max”);
艺人布莱恩=新艺人(“布莱恩”);
Map musicLibrary=new HashMap();
musicLibrary.put(max.getArtist(),max.addSong(“Hello”);
musicLibrary.put(max.getArtist(),max.addSong(“世界”);
musicLibrary.put(brian.getArtist(),brian.addSong(“世界”);
musicLibrary.put(brian.getArtist(),brian.addSong(“世界”);
musicLibrary.put(max.getArtist(),max.addSong(“世界”);
设置keySet=musicLibrary.keySet();
用于(字符串键:键集){
字符串值=musicLibrary.get(键);
System.out.println(键+“:”+值);
}
}
}
此类是艺术家对象

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;
    }
}
import java.util.LinkedList;
导入java.util.ListIterator;
公共阶层艺术家{
字符串词名;
弦乐艺术家;
静态LinkedList artistSongs=新建LinkedList();
静态ListIterator songsIt=artistSongs.ListIterator();
公共艺术家(弦乐艺术家){
这个艺术家=艺术家;
}
公共静态字符串addSong(字符串songName){
//这个艺术家=艺术家;
艺人歌曲。添加(歌曲名称);
返回输出();
}
公共静态字符串输出(){
字符串allSongs=“”;
为(弦乐歌曲:艺人歌曲){
allSongs=allSongs+,“+artistSongs.get(artistSongs.indexOf(song));
}
返回所有歌曲;
}
公共字符串getArtist(){
回归艺术家;
}
}
我当前的输出是:
布莱恩:你好,世界,世界,世界
马克斯:你好,世界,世界,世界,世界

当我想要的时候:
布莱恩:世界,世界

Max:,你好,世界,世界

您已将
艺人歌曲
声明为
静态
。这意味着它不属于特定实例,而是属于类,并且在所有实例之间共享。将其定义为实例变量,您应该可以:

List artistSongs=new LinkedList();

看看这里:)谢谢!我不得不从那个类中删除所有静态引用,它成功了。