我想知道是否有人可以解释为什么我在getSordsInOrderOfFrequency方法中遇到List错误
public List<String> getWordsInOrderOfFrequency(){
List tmp = new ArrayList<String> (frequencies.keySet());
Collections.sort (tmp, this);
return tmp;
这是我的解析方法和频率供参考:
public Parser() {
// do not change the constructor, this initializes an empty Map
frequencies = new HashMap<String, Integer>();
}
public void parse (String filename) throws IOException{
File file = new File(filename);
Scanner scanner = new Scanner(file);
Map<String, Integer> frequencies = new TreeMap<String, Integer>();
while(scanner.hasNext()){
String word = scanner.next().replaceAll("[^A-Za-z0-9]"," ").toLowerCase();
if(!frequencies.containsKey(word)){
frequencies.put(word, 1);
}
else{
frequencies.put(word, frequencies.get(word)+1);
}
}
}
答案 0 :(得分:1)
忽略与比较相关的问题,您已在frequencies
方法中覆盖parse
。因此,该方法使用局部变量而不是实例1。因此,在getWordsInOrderOfFrequency
之后调用parse
将导致空列表。
答案 1 :(得分:0)
目前,您正在根据单词而不是频率对列表进行排序。
创建一个节点类WordFrequency
来存储该单词及其频率,并使其实现Comparable<WordFrequency>
:
class WordFrequency implements Comparable<WordFrequency> {
private final String word;
private final int frequency;
public Word(final String word, final int frequency) {
this.word = word;
this.frequency = frequency;
}
public String getWord() {
return word;
}
public int getFrequency() {
return frequency;
}
public int compare(final WordFrequency other) {
if(other == null) {
return -1;
} else {
return Integer.compare(frequency, other.frequency);
}
}
}
然后,遍历您的地图,创建一个WordFrequency对象列表并对列表进行排序。