gpt4 book ai didi

java - 存储在 Map 中的每个对象返回存储在最后一个对象中的值

转载 作者:行者123 更新时间:2023-11-30 07:58:46 25 4
gpt4 key购买 nike

我检查了一些解决方案,但他们似乎都说问题是人们在创建 HashMap 时使用“静态”一词或不使用类名。我正在尝试创建一个 map ,其中包含一个人的姓名(键)和他们的考试成绩(值)。我正在尝试传递一个对象作为值,这样做:

HashMap<String, Scores> map = new HashMap<String, Scores>();

List<Integer> scores = new ArrayList<Integer>();
scores.add(55);
scores.add(66);
scores.add(77);

map.put("foo", new Scores(scores));

scores.clear();

scores.add(70);
scores.add(80);
scores.add(90);

map.put("bar", new Scores(scores));

System.out.println(map.get("foo").getScores());
System.out.println(map.get("bar").getScores());
System.out.println(map.get("foo").getAverage());

对于我的分数类(class),我有以下内容:

List<Integer> scores = new ArrayList<Integer>();
private int sum = 0;

public Scores(List<Integer> s){
this.scores = s;
}

public double getAverage(){
int count = 0;
for (int x: this.scores){
this.sum += x;
count++;
}
return this.sum / count;
}

public List<Integer> getScores(){
return this.scores;
}

当我运行我的代码时,我得到以下输出:

[70, 80, 90]
[70, 80, 90]
80.0

我没有使用“静态”来存储我的分数,之后我使用 clear() 来防止旧值重复。我在创建 HashMap<> 变量时也使用了类名。

谁能告诉我为什么 'map.get("foo")' 和 'map.get("bar")' 都返回相同的值,我该如何解决这个问题?他们还可以提供一个工作示例吗?谢谢!

最佳答案

new Scores(scores) 不会创建传递给它的 List 实例的副本。它存储对该 List 的引用。

因此,您作为值放入 Map 中的两个 Scores 实例都引用相同的 List

代替

scores.clear();

你应该创建一个新的 List :

scores = new ArrayList<Integer>();

为了让两个 Scores 实例引用不同的 List

关于java - 存储在 Map 中的每个对象返回存储在最后一个对象中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40116988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com