我有一个 Tuple 类,它有:
private class Tuple {
private int fileno;
private int position;
public Tuple(int fileno, int position) {
this.fileno = fileno;
this.position = position;
}
}
我也有一个哈希图,它引用了这个列表,比如
Map<String, List<Tuple>> index = new HashMap<String, List<Tuple>>();
现在有一个场景需要统计一个文件有多少个单词: 数据如下:
abc 10.txt
abc 10.txt
abc 10.txt
abc 12.txt
abc 12.txt
ghost 15.txt
and so on....
现在如何计算上述发生的次数?这很容易,但我已经编写了这么长时间的代码,而且对 java 也很陌生。我还了解到重复项不能进入 hashmap!谢谢。
要将数据添加到列表:
List<Tuple> idx = index.get(word);
if (idx == null) {
idx = new LinkedList<Tuple>();
index.put(word, idx);
}
idx.add(new Tuple(fileno, pos));
上面的代码只是转储数据,现在我将与字符串数组[]中的单词进行比较。我最后需要的是这样的: abc 10.txt count - 3 abc 12.txt count - 2 ghost 15.txt count - 1
我不确定 map 是否有帮助/我需要再次使用列表/编写函数来执行此操作?谢谢!
我用简单的条件语句解决了上述问题!谢谢@codeguru
/*
consider all cases and update wc as along
Lesson learnt - Map does not handle duplicates
- List does not work
- spend half a day figuring out
*/
if(wordInstance == null && fileNameInstance == null) {
wordInstance = wordOccurence;
fileNameInstance = files.get(t.fileno);
}
if(wordInstance == wordOccurence && fileNameInstance ==files.get(t.fileno)) {
wc++;
}
if(wordInstance == wordOccurence && fileNameInstance !=files.get(t.fileno)) {
wc=0;
fileNameInstance = files.get(t.fileno);
wc++;
}
if(wordInstance != wordOccurence && fileNameInstance ==files.get(t.fileno)) {
wc=0;
wordInstance = wordOccurence;
wc++;
}