This is a "smart dictionary", which processes a word list into collections based on the length of the word.
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* This smart dictionary holds a list of words and also caches them by size. This is an optimization for running through a lot of words one after another.
* @author nrrkeene
*
*/
public class SmartDictionary {
private List<String> words;
private Map<Integer, List<String>> wordsByLength;
public SmartDictionary(List<String> words) {
this.words = words;
this.wordsByLength = new HashMap<Integer, List<String>>();
for(String word: words) {
List<String> wordsOfLength = this.wordsByLength.get(word.length());
if(wordsOfLength == null) wordsOfLength = new ArrayList<String>();
wordsOfLength.add(word);
this.wordsByLength.put(word.length(), wordsOfLength);
}
}
public List<String> allWords() {
return this.words;
}
public List<String> wordsByLength(int length) {
List<String> wordsOfLength = this.wordsByLength.get(length);
if(wordsOfLength == null) wordsOfLength = new ArrayList<String>();
return wordsOfLength;
}
}
No comments:
Post a Comment