This program prints the words in order of their frequencies. Higher frequency word will appear on top and words with same frequency will be sorted alphabetically.
import java.util.HashMap;
import java.util.Arrays;
public class WordFrequencyCounter{
private class Word implements Comparable<Word>{
String word;
int count;
public Word(String word, int count){
this.word=word;
this.count=count;
}
public int compareTo(Word otherWord){
if(this.count == otherWord.count){
return this.word.compareTo(otherWord.word);
}
return (otherWord.count - this.count);
}
}
private Word[] getFrequentWords(String words[]){
HashMap<String, Word> map = new HashMap<String, Word>();
for(String s:words){
Word w = map.get(s);
if(w == null){
w = new Word(s, 1);
}else{
w.count++;
}
map.put(s, w);
}
Word[] list = map.values().toArray(new Word[]{});
Arrays.sort(list);
return list;
}
public static void main(String... args){
String[] words = {"hello", "hi", "how", "are", "you", "what's up", "hi", "hello"};
Word[] frequency = new WordFrequencyCounter().getFrequentWords(words);
for(Word w:frequency){
System.out.println(w.word+" "+w.count);
}
}
}