HashMap和containsKey()方法

时间:2016-07-22 17:35:30

标签: java collections hashmap

我需要从文件中读取一些数据并对其进行排序。但是当我尝试使用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

1 个答案:

答案 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

比较对象的相等性