我有一个名为List
的{{1}}个实例和一个名为words
的{{1}}个实例。我在列表中有一些单词,并将它们计算在HashMap
上。 map
计为值,单词为关键。
我不知道我在这里做错了什么。非常感谢任何帮助。
是否有更好的实施?
HashMap
始终输入我的HashMap
子句。
答案 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);
}