マップを使用する必要があります-これは、単語の一意のリストを維持するために自動的に処理されます。メソッドをオーバーライドして上書きするのput
ではなく集計すると、カウントが自動的に加算されます。
private void readWords(final Iterator<String> in) {
final Map<String, Integer> wordMap = new HashMap<String, Integer>() {
@Override
public Integer put(String key, Integer value) {
final Integer origValue = get(key);
if (origValue == null) {
return super.put(key, value);
} else {
return super.put(key, origValue + value);
}
}
};
while (in.hasNext()) {
wordMap.put(in.next(), 1);
}
//just for display - not necessary
for (final Entry<String, Integer> entry : wordMap.entrySet()) {
System.out.println("Word '" + entry.getKey() + "' appears " + entry.getValue() + " times.");
}
}
テスト:
List<String> strings = new LinkedList<String>();
strings.add("one");
strings.add("two");
strings.add("two");
strings.add("three");
strings.add("three");
strings.add("three");
readWords(strings.iterator());
出力:
Word 'two' appears 2 times.
Word 'one' appears 1 times.
Word 'three' appears 3 times.
TreeMap
ではなくを使用して単語をアルファベット順に並べ替えることができますHashMap
。これは表示に適している場合があります。マップで何をする予定かによって異なります。