计算列表中的单词并将其计数保存在Hashmap中

时间:2014-10-16 09:23:42

标签: java hashmap word-count

我有一个名为List的{​​{1}}个实例和一个名为words的{​​{1}}个实例。我在列表中有一些单词,并将它们计算在HashMap上。 map计为值,单词为关键。

我不知道我在这里做错了什么。非常感谢任何帮助。

是否有更好的实施?

HashMap

始终输入我的HashMap子句。

5 个答案:

答案 0 :(得分:1)

您正在每次迭代中创建一个新地图。您应该将地图初始化移动到循环之前。

答案 1 :(得分:1)

是的,因为你为每个单词实例化了一个新的HashMap:

for (String aword : words) {
    map = new HashMap<String, Integer>();    // <- here
...

将其移出循环:

map = new HashMap<String, Integer>();
for (String aword : words) {
    if (map.containsKey(aword)) {
 ...

答案 2 :(得分:1)

在for循环外创建地图

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

for (String aword : words) {         
            if (map.containsKey(aword)) {
                int count;
                try {
                    count = map.get(aword);
                    count++;
                } catch (NullPointerException npe) {
                    count = 0;
                }
                map.put(aword, count);
                System.out.println(aword+"SS"+count);
            } else {
                map.put(aword, 0);
                System.out.println(aword+"else"+0);
            }
        }

答案 3 :(得分:1)

而不是使用containsKey然后得到然后我这样做:

    map = new HashMap<String, Integer>(); //put it here instead than in the for loop
    for (String aword : words) {
        Integer tmp = stats.put(word, 1); //tmp is the previous value associated with key "word"
        if (tmp != null) {
            stats.put(word, ++tmp);
        }
    }

答案 4 :(得分:1)

在循环外创建地图并删除try-catch。

    Map<String, Integer> map = new HashMap<>();
    for (String word : words) {
        int count = map.containsKey(word) ? map.get(word) : 0;
        map.put(word, count + 1);
    }