我需要从文件中读取一些数据并对其进行排序。但是,当我尝试使用containsKey()方法时,它不起作用,而且我有两个不同的键,具有相同的填充。可能是,我遇到问题的原因是该方法具有对象参数类型,并且有指向对象比较的链接。但是如何比较HashMap中的字符串键呢?
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发布于 2016-07-22 17:51:28
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服务器),它给了我预期的结果。
如果您的键不是字符串,而是A类的实例,则必须重写A类的hashCode()和equals()方法。
HashMap根据对象的键将所有元素存储在桶中,根据对象的哈希代码值将元素存储在特定的桶中。例如,如果两个对象a1和a2具有相同的哈希代码值,它们将被放入同一个桶的列表中,当您检索a1时,它首先检查哈希代码并找到正确的桶,然后迭代元素列表并使用equals比较对象的相等性。
https://stackoverflow.com/questions/38532337
复制相似问题