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);
        }
    }
} 
 
 
 
No comments:
Post a Comment