Использование HashMap с пользовательским объектом в Java - PullRequest
1 голос
/ 18 апреля 2020

Я пытаюсь использовать следующий код для создания HashMap пользовательских объектов.

public static void test() {
    programStats ps = new programStats();
    programStats ps1 = new programStats();
    List<programStats> psList = new LinkedList<programStats>();

    ps.progName = "test1";  
    ps1.progName= "Test11";

    psList.clear();
    psList.add(ps);

    Map<String,List<programStats>> d = new HashMap<String, List<programStats>>();
    d.put("Test1", psList);

    psList.add(ps1);
    for (programStats p : d.get("Test1")) {
        System.out.println(p.progName);
    }

class  programStats {
        public static String progName, module;
        public static int min, max,  mean,  mid, count;
        public static List<Integer> data = new ArrayList<Integer>();;
}   

Я заметил, что когда я устанавливаю значение ps1, значение ps тоже меняется.

Что я делаю не так?

1 Ответ

2 голосов
/ 18 апреля 2020

Все члены вашего programStats класса static, что означает, что они принадлежат классу , а не конкретному c экземпляру . Таким образом, независимо от того, какой экземпляр вы используете для их изменения, эти значения будут видны через любой экземпляр. Вы должны изменить их на членов экземпляра:

class  programStats {
    // Note: The member are no longer static:
    public String progName, module;
    public int min, max,  mean,  mid, count;
    public List<Integer> data = new ArrayList<Integer>();
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...