我需要从文件中读取一些数据并对其进行排序。但是当我尝试使用containsKey()
方法时,它不起作用,我有2个不同的键具有相同的填充。可能是,我遇到问题的原因是该方法具有Object参数类型并且存在对象比较的链接。但是如何比较HashMap中的String键?
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new FileReader(args[0]));
Map<String, Double> map = new HashMap<>();
while (reader.ready()) {
String[] ss = reader.readLine().split(" ");
String key = ss[0];
String val = ss[1];
double value = Double.parseDouble(val);
if (map.containsKey(key)) {
map.put(key, map.get(key) + value);
}
else map.put(key, value);
}
for (Map.Entry<String, Double> pair : map.entrySet())
{
System.out.println(pair.getKey() + " " + pair.getValue());
}
reader.close();
}
}
以上程序输出:
Sidorov 4.0
Petrov 3.0
Ivanov 5.0
Ivanov 33.0
答案 0 :(得分:0)
hzhang@ubuntu:~$ cat sample.csv
hello 4.0
hi 3.1
hello 5.0
hzhang@ubuntu:~$ java Solution sample.csv
hi 3.1
hello 9.0
我已经测试了你的代码(Ubuntu服务器),它给了我预期的结果。
如果您的密钥是除了String之外的A类实例,则必须覆盖A类的hashCode()
和equals()
方法。
HashMap根据对象的键将所有元素存储在存储桶中,它根据对象的哈希码值将元素存储在特定存储桶中。例如,如果两个对象a1和a2具有相同的哈希码值,则它们将被放入同一个桶的列表中,当您检索a1时,首先检查哈希码并找到正确的桶,然后迭代元素列表并使用equals