gpt4 book ai didi

java - HashMap 更新关于最后一项的所有值

转载 作者:行者123 更新时间:2023-11-30 06:46:16 26 4
gpt4 key购买 nike

我正在尝试存储一个具有多个值的键。首先,我读取文本文件中的一些字符串,然后拆分,最后尝试存储。 问题是,当我尝试存储每个学生的类(class)时,我的 studentByForCourseName HashMap 每次都会更新所有值(类(class))和最后添加的项目。所以,看起来每个学生都和最后一个学生上同样的类(class)在我的 map 中。我该如何解决这个问题?

List<String> course_names = new ArrayList<String>();
Map<String, List<String>> studentByForCourseName = new HashMap<String, List<String>>();


... try {
FileReader fr = new FileReader(file);
br = new BufferedReader(fr);

String line;

while( (line = br.readLine()) != null ) {
System.out.println(line);
char[] chr_line = line.toCharArray();
String word="";
String tmp = "";

if(course_names.size()>0)
course_names.clear();

for(int i=0; i<chr_line.length; i++) {

if(chr_line[i] == ':') {
student_names.add(word);
tmp = word;
word = "";
continue;
}

if( chr_line[i] == ',') {
course_names.add(word);
word = "";
continue;
}

if(i == line.length()-1) {
course_names.add(word);
word="";
}

word += chr_line[i];


}

studentByForCourseName.put(tmp, course_names);
}...

我的 txt 文件是:

Ayse Kara:MATH101,CSE100,MATH259
Efe Anıl:BLAW203,MATH101
Suat Ali Barut:STAT253,MATH259
Nil Girgin:MATH259,HIST111,STAT253

最佳答案

当你打电话时

studentByForCourseName.put(tmp, course_names);

您没有放置 course_names 引用的实例的副本在Map .您正在放置引用本身。

因此,如果course_names一直引用相同的 ArrayList<String>实例(就像现在一样),你的 Map 中的所有键将具有相同的值。

您应该创建一个新的 ArrayList在循环的每次迭代中。

改变

if(course_names.size()>0)        
course_names.clear();

course_names = new ArrayList<> ();

另一种替代方法(而不是上述建议的更改)是创建 ArrayList 的副本当你put它在 Map :

studentByForCourseName.put(tmp, new ArrayList<>(course_names));

关于java - HashMap 更新关于最后一项的所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47812722/

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